我想从函数返回Foo类型的不可复制对象。基本上,这是一个帮助程序对象,调用方将使用该对象来执行一组操作,并在操作完成后使用析构函数进行一些清除。

rvalue references出现之前,我会返回shared_ptr<Foo>或类似的东西。使用右值引用,另一种选择是将构造函数和复制构造函数设为私有(private),并使唯一的公共(public)构造函数成为move构造函数。 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

我的问题是,这样做是否会很糟糕,或者看起来是否合理。我无法想到这会导致问题或难以阅读的任何原因,但是在涉及右值引用时,我还是一个新手,因此可能有一些我没有想到的考虑。

最佳答案

这根本不是一个坏形式-考虑像互斥对象这样的对象,或者像unique_ptr这样的作用域对象。 Unique_ptr是可 move 的,但不可复制,它是STL的一部分。

10-08 09:36
查看更多