将make_unique <x>分配给shared_ptr <x>

时间:2016-08-18 15:23:50

标签: c++ shared-ptr unique-ptr move-assignment-operator

我(错误地)在我的计划中有以下任务:

shared_ptr

当我发现这个时,我首先想知道为什么这甚至会编译。事实证明unique_ptruse Set::Scalar; Set::Scalar->as_string_callback(sub{join("\n", sort $_[0]->elements)}); #above formats print so that a line is added between each element ... #assume things are added to the set in this code my @arr = split("\n", "$set"); #array contains each sorted element of the set 个对象的特殊移动赋值运算符。

我的问题是,这样做是否总是安全的,或者是否有任何影响?

(代码执行安全;代码审查显然不安全......)

2 个答案:

答案 0 :(得分:3)

是的,那是非常安全的; def action_one @params = params action_two # to execute the code from action_two render action: :action_two and return # to render view of action_two end def action_two @params ||= params # work with passed @params end 有一个构造函数,可以通过移动从shared_ptr转移所有权。虽然它没有正确调用unique_ptr那么有效。

答案 1 :(得分:3)

这样做是“安全的”,因为您不会有任何双重删除或其他问题。

这样做是不对的,因为:

  1. 这是误导性的 - make_unique用于制作唯一的指针,而不是共享。
  2. 浪费 - make_unique只会分配对象,而不是关联的控制块。这将强制shared_ptr构造函数分配控件块本身。 std::make_shared在一次分配中分配它们,效率更高。