将清除共享智能指针上的调用重置

Will clear call reset on shared smart pointer

我最近更改了我的原始指针以在这样的容器中使用 std::shared_ptr

std::vector<std::shared_ptr<AbstractPathContainer>> mGeneratedPaths;

当我在此容器上调用 clear() 时,它会在其中的每个 std::shared_ptr 上调用 reset() 方法吗?

否;它将在每个指针上调用析构函数(可能调用也可能不调用 reset())。

如果你的问题确实是"will my memory be freed if appropriate?"那么答案是肯定的;引用计数将根据每个共享 ptr 对象的需要进行调整,如果它是 0,则该对象将被删除。

不,它会调用析构函数。析构函数将减少每个智能指针的引用计数,如果它带来 0 然后析构函数调用自由函数(默认情况下这是删除包装器)。所以如果你做了类似的事情:

std::vector<std::shared_ptr<AbstractPathContainer>> mGeneratedPaths ({c1, std::shared_ptr<AbstractPathContainer>(new AbstractPathContainerImpl())  });
std::shared_ptr<AbstractPathContainer> smartRef = mGeneratedPaths[0];
 mGeneratedPaths.clear();

smartRef 不会从堆中删除。