c++ - std::shared_ptr 什么时候释放它的对象?

标签 c++ c++11 shared-ptr resource-management

我在使用 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/

相关文章:

c++ - CHAR Name [1]如何容纳超过1个字符?

c++ - 使用 memset 将派生结构归零

c++ - 为什么shared_ptr类型没有模板分配器参数?

c++ - 它是否与共享指针一起正常工作(C++)

c++ - 如何在 MFC 的功能区文本框中实现数据验证

c++ - 具有模板参数大小的 Const char 数组与 char 指针

c++ - C++11 中的异步/ future 数量

c++ - 将 vector 项传递给参数数量未知的函数对象

c++ - 在多个线程/函数之间使用shared_ptr-IDS Peak API

c++ - 如果在指令之前调用递归函数怎么办?