我最近更改了我的原始指针,以便在如下所示的容器中使用std::shared_ptr
:
std::vector<std::shared_ptr<AbstractPathContainer>> mGeneratedPaths;
当我在此容器上调用clear()
时,它会在其中的每个std::shared_ptr
上调用reset()
方法吗?
否;它将在每个指针上调用析构函数(可能会也可能不会调用reset()
(。
如果你的问题真的是"如果合适,我的记忆会被释放吗?"那么答案是肯定的;引用计数将根据每个共享PTR对象的需要进行调整,如果它是0,那么该对象将被删除。
不,它将调用析构函数。析构函数将减少每个智能指针的引用计数,如果它带来0
则析构函数调用 free 函数(默认情况下这是删除包装器(。因此,如果您执行以下操作:
std::vector<std::shared_ptr<AbstractPathContainer>> mGeneratedPaths ({c1, std::shared_ptr<AbstractPathContainer>(new AbstractPathContainerImpl()) });
std::shared_ptr<AbstractPathContainer> smartRef = mGeneratedPaths[0];
mGeneratedPaths.clear();
smartRef
不会从堆中删除。