首页 > 解决方案 > 将 shared_ptr 分配给自身安全吗?

问题描述

自行分配 a 是否安全std::shared_ptr?所以这里有一个例子:

std::shared_ptr<std::vector<std::string>> pVec = std::make_shared<std::vector<std::string>>();

std::cout << pVec.use_count() << std::endl; // 1
pVec = pVec;

我知道分配一个shared_ptr对象:

所以在这个例子中,对象在 LHS 和 RHS 上都是相同的,并且赋值运算符中这两个 RC 变化的顺序是未指定的。

我真的不知道在自我分配的情况下会发生什么。

标签: c++shared-ptrreference-countingcopy-assignment

解决方案


根据's上的 cppreference 文档shared_ptroperator=(强调添加):

将托管对象替换为由 管理的对象r

如果*this已经拥有一个对象并且它是最后一个shared_ptr拥有它的对象,并且r与 不同*this,则该对象通过拥有的删除器被销毁。

基本上他们已经想到了这种可能性,需要实施来处理这种情况;自赋值不会删除对象,即使它是对象的唯一所有者。


推荐阅读