std::shared_ptr是一个智能指针,它会自动管理其指向的对象的生命周期。当std::shared_ptr的引用计数变为0时,它会自动删除其管理的对象。因此,通常情况下,我们不能让std::shared_ptr释放其管理的对象但不删除该对象。
然而,如果你确实需要这样做,你可以使用一个自定义的删除器。例如:
struct DoNothingDeleter {
template <typename T>
void operator()(T*) const {}
};
int* p = new int(10);
std::shared_ptr<int> ptr(p, DoNothingDeleter());
在这个例子中,当ptr的引用计数变为0时,它不会删除其管理的int(10),因为我们提供了一个什么都不做的删除器。
请注意,这种做法可能会导致内存泄漏,因为你需要手动删除p来释放内存。除非你清楚地知道你在做什么,否则通常不推荐这样做。
博客介绍了std::shared_ptr智能指针会自动管理对象生命周期,通常不能释放对象却不删除。若有此需求,可使用自定义删除器,如示例中的DoNothingDeleter。但这种做法可能导致内存泄漏,需手动释放内存,非必要不推荐。
1084

被折叠的 条评论
为什么被折叠?



