【发布时间】:2015-10-14 07:02:50
【问题描述】:
假设我有一个函数,它返回一个智能指针,指向指向某些数据的智能指针向量。
shared_ptr<vector<shared_ptr<Data>> getVectorPtr();
auto vecPtr = getVectorPtr();
当 vecPtr 超出范围并将被销毁时,其中的 shared_ptrs 是否也会被删除?
仅供参考:智能指针如何在内部意识到它超出了范围?
【问题讨论】:
-
“它如何在内部意识到它超出了范围?”它的析构函数叫做
-
它有一个计数器(引用计数)。每次超出范围时,它都会减少它,当计数为 0 时,它会调用析构函数。如果你通过值传递它会增加计数,如果你通过引用传递它,计数保持不变
-
谢谢,应该知道了。当智能指针超出范围时,它的析构函数被调用,它将处理引用计数,如果需要,将删除数据。
标签: c++ pointers c++11 shared-ptr smart-pointers