7

関数から型のコピー不可能なオブジェクトを返したいFooです。これは基本的に、呼び出し元が一連のアクションを実行するために使用するヘルパー オブジェクトであり、アクションの完了後にデストラクタを使用してクリーンアップを実行します。

右辺値参照が出現する前は、 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

私の質問は、これを行うのが悪い形なのか、それとも合理的に見えるのかということです。これが問題を引き起こしたり、読みにくくなったりする理由は考えられませんが、右辺値参照に関してはまだ初心者なので、考えていない考慮事項があるかもしれません。

4

1 に答える 1

9

これはまったく悪い形式ではありません。mutex のようなオブジェクトや、unique_ptr のようなスコープ オブジェクトを検討してください。Unique_ptr は移動可能ですが、コピー可能ではなく、STL の一部です。

于 2010-09-06T16:56:01.907 に答える