我在使用 GCC 4.8.4 的 Ubuntu 14.04 上,我的代码类似于以下内容:
std::shared_ptr<MyClass> my_shared_object = set elsewhere...
MyFunction(*my_shared_object);
MyFunction
的签名如下所示:
void MyFunction(const MyClass& my_object)
可以找到完整的代码here
但是,我发现 my_object 实际上超出了 MyFunction
上下文中的范围。我的想法是 my_shared_object
只有在超出范围后才会释放其内容,这意味着在 MyFunction
返回之后。我不确定我是否误解了 std::shared_ptr
或者这是否是 GCC 错误。
我想这个问题可以归结为:当我取消引用 std::shared_ptr 时,这是否保证只要取消引用被使用,std::shared_ptr
就会持续存在?
最佳答案
任何由 std::shared_ptr
管理的内容都将在没有 std::shared_ptr
声明声明的那一刻被销毁,所有其他引用它的方式都是无关紧要。
并且局部变量只有在离开各自的作用域时才会被销毁。取消引用 std::shared_ptr
不会以任何方式修改它。
关于c++ - std::shared_ptr 什么时候释放它的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33812738/