仅提供移动构造函数是不好的形式?

Cha*_*lie 7 c++ rvalue-reference move-constructor move-semantics c++11

我想Foo从函数返回一个不可复制的类型对象.这基本上是一个辅助对象,调用者将使用它来执行一组操作,析构函数在操作完成后执行一些清理.

rvalue引用出现之前,我会返回一个shared_ptr<Foo>或类似的东西.使用rvalue引用,另一个选项是使构造函数和复制构造函数成为私有,并使唯一的公共构造函数成为移动构造函数.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
Run Code Online (Sandbox Code Playgroud)

我的问题是,这样做是否不好,或者看起来是否合理.我想不出有什么理由会导致问题或者难以阅读,但是当涉及到rvalue引用时,我仍然是一个新手,所以可能会考虑我没想到的.

Pup*_*ppy 9

这根本不是坏形式 - 考虑像互斥体这样的对象或像unique_ptr这样的范围对象.Unique_ptr是可移动但不可复制的,它是STL的一部分.