gpt4 book ai didi

c++ - shared_ptr&& 作为构造函数参数的目的

转载 作者:行者123 更新时间:2023-11-30 01:26:25 24 4
gpt4 key购买 nike

这个问题扩展了之前的 post讨论 boost::shared<T>& 的用处作为构造函数参数:

class SomeClass {  
SomeClass( const boost::shared_ptr<SomeOtherClass>& );
}

将右值引用参数代替 boost::shared_ptr<T>&提供任何优势?

class SomeClass {  
SomeClass( const boost::shared_ptr<SomeOtherClass>&& );
}

特别是,对于多线程设置,具有 shared_ptr 类型右值引用的构造函数是否比按值传递或按引用传递更有用?

最佳答案

shared_ptr并不特别。几乎所有其他对象都适用相同的规则。你会制作一个 const 右值引用参数吗?我看不出任何正当理由。其他类的右值引用呢?除了类自己的移动构造函数和移动赋值运算符之外,在大多数情况下,您不应通过右值引用获取对象。如果您需要该对象的拷贝,则按值获取它,然后移动它,如下所示:

class SomeClass {
std::shared_ptr<SomeOtherClass> myptr;
public:
SomeClass(std::shared_ptr<SomeOtherClass> yourptr)
:myptr(std::move(yourptr))
{}
};

如果您不需要拷贝,那么如果您的意图只是检查它,您可以通过 const 引用获取它,或者如果您打算修改它,则通过普通引用获取它。

如果你想 promise 你不会修改指向的对象,那么你可以接受const std::shared_ptr<const SomeOtherClass> & ,即使参数没有内部 const 限定符,这也会起作用。

关于c++ - shared_ptr<T>&& 作为构造函数参数的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458494/

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