将对象传递给将创建它的函数时使用什么合适的智能指针

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拥有工厂时,使用新的智能指针是正确的做法。