我(错误地)在我的计划中有以下任务:
shared_ptr
当我发现这个时,我首先想知道为什么这甚至会编译。事实证明unique_ptr
有use 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
个对象的特殊移动赋值运算符。
我的问题是,这样做是否总是安全的,或者是否有任何影响?
(代码执行安全;代码审查显然不安全......)
答案 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)
这样做是“安全的”,因为您不会有任何双重删除或其他问题。
这样做是不对的,因为:
make_unique
用于制作唯一的指针,而不是共享。 make_unique
只会分配对象,而不是关联的控制块。这将强制shared_ptr
构造函数分配控件块本身。 std::make_shared
在一次分配中分配它们,效率更高。