代码之家  ›  专栏  ›  技术社区  ›  Charlie

仅仅提供一个move构造函数是不是很糟糕?

  •  7
  • Charlie  · 技术社区  · 14 年前

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

    rvalue references ,我会退回 shared_ptr<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
    

    我的问题是这样做是不好的形式,还是看起来合理。我想不出为什么这会引起问题或难以阅读,但我还是一个新手,当谈到rvalue参考,所以可能有一些考虑我没有考虑。

    1 回复  |  直到 14 年前
        1
  •  9
  •   Puppy    14 年前

    这种形式一点也不坏——考虑mutex之类的对象或unique\u ptr之类的作用域对象。唯一的ptr是可移动的,但不可复制,它是STL的一部分。