将对象传递给将创建它的函数时使用什么合适的智能指针
What is the appropriate smart pointer to use when passing an object to a function which will create it
如果我有如下设置,适合使用的智能指针类型是什么?还是应该改用原始指针?
void factory (some_ptr_type_here<A> a)
{
a = some_type_of_new<A>(...,..);
}
some_ptr_type_here<A> a;
factory(a);
If I have a setup as below, what would be an appropriate smart pointer type to use?
在这种情况下,根本没有智能指针可以完成这项工作。你应该让你的工厂 return 一个新的智能指针类型而不是 void
。您可能是 C 程序员吗?
无论如何,智能指针的引用计数通常取决于作用域(and/or 显式增加)。将智能指针传递给要填充新对象的函数打破了这个概念。是的,可以编写这样工作的代码,但通常情况下,智能指针(尤其是 unique_ptr 和表兄弟)保留内部结构,这会使这样做特别尴尬。
真的:只是return一个新的智能指针,指向你的新对象;不要尝试按值传递。无论如何,如果您的函数是修改一个对象,您永远不会按值传递,而是通过引用。不过,return拥有工厂时,使用新的智能指针是正确的做法。
如果我有如下设置,适合使用的智能指针类型是什么?还是应该改用原始指针?
void factory (some_ptr_type_here<A> a)
{
a = some_type_of_new<A>(...,..);
}
some_ptr_type_here<A> a;
factory(a);
If I have a setup as below, what would be an appropriate smart pointer type to use?
在这种情况下,根本没有智能指针可以完成这项工作。你应该让你的工厂 return 一个新的智能指针类型而不是 void
。您可能是 C 程序员吗?
无论如何,智能指针的引用计数通常取决于作用域(and/or 显式增加)。将智能指针传递给要填充新对象的函数打破了这个概念。是的,可以编写这样工作的代码,但通常情况下,智能指针(尤其是 unique_ptr 和表兄弟)保留内部结构,这会使这样做特别尴尬。
真的:只是return一个新的智能指针,指向你的新对象;不要尝试按值传递。无论如何,如果您的函数是修改一个对象,您永远不会按值传递,而是通过引用。不过,return拥有工厂时,使用新的智能指针是正确的做法。