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

标签 c++ c++11 smart-pointers

如果我有如下设置,什么是适合使用的智能指针类型?或者在这种情况下应该改用原始指针?

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/

相关文章:

c++ - 旧版 MySQL 连接器 C++ 使用 sql::ConnectOptionsMap 异常

c++ - 将 boost::shared_array<void> 转换为 boost::shared_array<int>

c++ - boost::shared_ptr<T> 和 boost::shared_ptr<const T> 是否共享引用计数?

c++ - 如何在方法中传递智能指针而不删除它

c++ - C++11 中类型的逐字节拷贝?

c++ - 重新缩放或缩放光标后的 qwt plot 移动曲线

c++ - std::unordered_map::find 使用不同于 Key 类型的类型?

c++ - VC++14 (VS2015) 中数组值初始化的内部编译器错误

c++ - 为什么BFS对于同一个图中不同的节点位置给出不同的运行时间?

c++ - 不能在数组上使用 .begin() 或 .end()