dam*_*enh 2 c++ constructor shared-ptr rvalue-reference c++11
这个问题扩展了之前讨论作为构造函数参数 的有用性的文章:boost::shared<T>&
class SomeClass {
SomeClass( const boost::shared_ptr<SomeOtherClass>& );
}
Run Code Online (Sandbox Code Playgroud)
用右值引用参数代替提供的参数是否有boost::shared_ptr<T>&任何优势?
class SomeClass {
SomeClass( const boost::shared_ptr<SomeOtherClass>&& );
}
Run Code Online (Sandbox Code Playgroud)
特别是,对于多线程设置,具有shared_ptr类型的右值引用的构造函数是否比按值传递或按引用传递更有用?
shared_ptr并不特别。与几乎任何其他对象一样,同样的规则也适用于它。你会制作一个 const 右值引用参数吗?我看不出任何正当理由。其他类的右值引用怎么样?除了类自己的移动构造函数和移动赋值运算符之外,大多数情况下,您不应该通过右值引用获取对象。如果您需要对象的副本,那么您可以按值获取它,然后移动它,如下所示:
class SomeClass {
std::shared_ptr<SomeOtherClass> myptr;
public:
SomeClass(std::shared_ptr<SomeOtherClass> yourptr)
:myptr(std::move(yourptr))
{}
};
Run Code Online (Sandbox Code Playgroud)
如果您不需要副本,那么如果您的目的只是检查它,则可以通过 const 引用来获取它,如果您打算修改它,则可以通过普通引用来获取它。
如果您想承诺不会修改指向的对象,那么您可以接受const std::shared_ptr<const SomeOtherClass> &,即使参数没有内部 const 限定符,这也将起作用。