将清除共享智能指针上的呼叫重置



我最近更改了我的原始指针,以便在如下所示的容器中使用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不会从堆中删除。

相关内容

  • 没有找到相关文章

最新更新