【发布时间】:2019-01-04 09:15:47
【问题描述】:
当我将shared_ptr 传递给将参数复制到成员shared_ptr 的构造函数时,该参数是否应该按值传递?
例子:
struct MyClass {
MyClass(std::shared_ptr<MyDependency> dep)
: dep(dep)
{}
std::shared_ptr<MyDependency> dep;
};
如果使用临时 (MyClass(std::make_shared<...>())) 构造,编译器应该移动参数(一次还是两次?)。
编译器是否能够“自动”将dep 移动到dep,
还是我应该使用: dep(std::move(dep))?
如果使用左值构造,则该值将被复制(最少一次)。
另一方面,通过 const-ref 传递 shared_ptr 将始终复制指针。
那么构造函数参数如果直接复制到成员中,是否应该传值呢?
编辑:参数/成员必须是shared_ptr。
【问题讨论】:
-
没有说明构造函数,但可能仍然值得阅读:Herb Sutter 的GotW#91...
-
您确定这里需要
shared_ptr吗?此示例中没有共享所有权。 -
@MaximEgorushkin 是的,它是必需的。这个例子不是最好的。
标签: c++ constructor pass-by-reference move pass-by-value