c++11 - 将一个 shared_ptr 分配给另一个

标签 c++11 shared-ptr

将一个共享指针分配给另一个共享指针是否会释放后者管理的内存?让

typedef shared_ptr<char> char_ptr_t;
char_ptr_t pA(new char('A'));
char_ptr_t pB(new char('B'));

现在,下面的语句是否释放了 'A' 的内存? ?
/*1*/ pA = pB;

还是我需要明确释放它:
/*2*/ pA.reset();
/*3*/ pA = pB;

并且,以下代码对于实现相同是否有效?
/*4*/ pA.reset(pB); //<-- is this valid? Not compiling in MSVC++ 2010, though the standard seems to allow it.

最佳答案

是的,pA不指向字符 'A'不再,所以引用计数递减。因为它是对 'A' 的唯一引用,引用计数达到零并删除字符。如果您必须在重新分配之前显式释放引用,那将是非常令人惊讶且容易出错的。
pA.reset(pB)不应该编译,如 reset只能取一个原始指针,不能取另一个 shared_ptr .

关于c++11 - 将一个 shared_ptr 分配给另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765720/

相关文章:

c++ - 为什么我的 RLE 代码显示 std out of range for c++?

c++ - Qt Creator 2.6.1 + Qt 5 + C++11 + MSVC2010 编译器

c++ - 模板类型推导

c++ - throw 可移动物体

c++ - C++ std::copy_if 中的 Lambda 表达式

c# - 如何使作为 SWIG shared_ptr 传递给非托管代码的托管代码对象保持事件状态?

python - 使用 SWIG 包装共享指针对象不授予对类成员函数的访问权限

c++ - 将现有的 shared_ptr 附加到 shared_ptr 的 vector

c++ - 什么时候在 Qt 中删除小部件(QVBoxLayout 类)?

c++ - C++ 中的 move 语义是否缺少 C 所缺少的东西?