C++ 将共享ptr分配给自身安全吗?

C++ 将共享ptr分配给自身安全吗?,c++,shared-ptr,reference-counting,copy-assignment,C++,Shared Ptr,Reference Counting,Copy Assignment,自行分配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; std::shared_ptr pVec=s

自行分配
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;
std::shared_ptr pVec=std::make_shared();

std::cout允许自分配,并且谈论内存泄漏是安全的。事实上,valgrind的任何文档和测试都没有显示共享指针的自分配会导致内存泄漏。

Per(重点添加):

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

如果
*此
已经拥有一个对象,并且它是最后一个
共享的\u ptr
拥有它,
r
*此
不同,则该对象将通过拥有的删除器销毁


基本上,他们已经想到了这个可能性,要处理这个案子就要执行,;自我分配不会删除对象,即使它是对象的唯一所有者。

不要忘记语言标记!“未指定赋值运算符的求值顺序。”-求值顺序是什么<代码>pVec=pVec调用,不需要任何额外的计算here@UnholySheepOP表示未指定所有权相关事件的顺序(创建新所有者、删除所有权)。@我更改了问题的措辞,以使问题更清楚,没有对问题采取立场。我并不是在证实订单事实上未指明的说法。这里的担心不是泄露,而是担心提前解除订单。不,这是一个安全的操作