Fel*_*bek 4 c++ shared-ptr unique-ptr move-assignment-operator
我(错误地)在程序中进行了以下分配:
std::shared_ptr<SI::Program> m_program; // in class
m_program = std::make_unique<SI::Program>(); // in method
Run Code Online (Sandbox Code Playgroud)
当我找到这个时,我首先想知道为什么它甚至可以编译。事实证明shared_ptr,unique_ptr对象具有特殊的移动分配运算符。
我的问题是,这样做是否总是安全的,或者有任何含义?
(对于代码执行而言是安全的;对于代码审阅显然不安全...)
从某种意义上讲,您不会有任何重复删除或其他问题,这样做是“安全的”。
这样做是不可行的,因为:
make_unique用于创建唯一的指针,而不是共享的。make_unique仅分配对象,而不分配关联的控制块。这将迫使shared_ptr构造函数自行分配控制块。std::make_shared一次分配它们,效率更高得多。