gpt4 book ai didi

c++ - shared_ptr 构造函数参数是否应该按值传递

转载 作者:太空狗 更新时间:2023-10-29 20:20:24 32 4
gpt4 key购买 nike

当我通过 shared_ptr到将该参数复制到成员中的构造函数 shared_ptr , 这个参数应该传值吗?

例子:

struct MyClass {
MyClass(std::shared_ptr<MyDependency> dep)
: dep(dep)
{}

std::shared_ptr<MyDependency> dep;
};

如果使用临时 ( MyClass(std::make_shared<...>())) 构建,编译器应该 move 参数(一次或两次?)。

编译器是否能够“自动” move depdep ,或者我应该使用 : dep(std::move(dep))

如果用左值构造,值将被复制(最少一次)。

另一方面,通过 shared_ptr通过 const-ref 将始终复制指针。

那么,如果将构造函数参数直接复制到成员中,是否应该按值传递它们?

编辑:参数/成员必须是 shared_ptr .

最佳答案

Should shared_ptr constructor arguments be passed by value

如果您打算共享所有权,即您想要保留一份拷贝:是的,按值传递是首选方式。

If constructed with a temporary ... the compiler should move the argument (once or twice?).

首先参数被 move 构造,然后成员被初始化(见下文)。论证的构造在某些情况下可能会被省略。

should I use : dep(std::move(dep))

是的,你应该。参数有一个名字,所以它是一个左值。要 move 构造成员,您需要有一个右值。

关于c++ - shared_ptr 构造函数参数是否应该按值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51554694/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com