我想Foo
从函数返回一个不可复制的类型对象。这基本上是一个辅助对象,调用者将使用它来执行一组操作,并使用析构函数在操作完成后执行一些清理。
在rvalue references出现之前,我会返回 ashared_ptr<Foo>
或类似的东西。使用右值引用,另一种选择是将构造函数和复制构造函数设为私有,并且唯一的公共构造函数是移动构造函数。Foo
看起来像这样:
class Foo : boost::noncopyable
{
private:
Foo( /* whatever the real ctor needs */ );
public:
Foo( Foo && src );
// ... interesting stuff ...
};
Foo a( SomethingThatReturnsFoo() ); // allowed
Foo b; // error, no public default constructor
Foo c( a ); // error, noncopyable
Foo d = a; // error, noncopyable
我的问题是这样做是否会是不好的形式,或者看起来是否合理。我想不出这会导致问题或难以阅读的任何原因,但是当涉及到右值引用时,我仍然是一个新手,所以可能有一些我没有想到的考虑因素。