如果我有如下设置,什么是适合使用的智能指针类型?或者在这种情况下应该改用原始指针?
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?
在这种情况下,根本没有智能指针可以完成这项工作。你应该让你的工厂返回一个新的智能指针类型而不是 void
。您可能是 C 程序员吗?
无论如何,智能指针的引用计数通常取决于作用域(和/或显式增加)。将智能指针传递给要填充新对象的函数打破了这个概念。是的,可以编写这样工作的代码,但通常情况下,智能指针(尤其是 unique_ptr 和 cousins)会保留内部结构,这会使这样做特别尴尬。
真的:只返回一个新的智能指针,指向你的新对象;不要尝试按值传递。无论如何,如果您的函数是修改一个对象,您永远不会按值传递,而是通过引用。不过,当您拥有工厂时,返回一个新的智能指针是正确的做法。
关于c++ - 将对象传递给将创建它的函数时使用什么合适的智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37461500/