复制但不移动

Pup*_*ppy 5 c++11

在C++ 0x中,是否合法/预期可以复制某些类但不移动?我正在考虑实现一个调整大小的异类,如果某些类需要复制而某些需要移动,我不确定我能处理它.

tem*_*def 5

是的,一个类可以复制但不可移动是合法的:

class MyClass {
public:
    /* Copyable... */
    MyClass(const MyClass&);
    MyClass& operator= (const MyClass&);

    /* ... but not movable. */
    MyClass(MyClass&&) = delete;
    MyClass& operator= (MyClass&&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

但是,我想不出有什么人愿意这样做的充分理由.知道C++程序员(比如我!),我认为你应该预料到这可能会出现.

出于好奇,如果一个类是可复制但不可移动的话,你依赖的代码会破坏什么?

  • 作为一个副节点,在这种情况下,最好不要显式声明移动构造函数,因为它实际上会调用像MyClass m = f();`(`f()`返回一个`MyClass`) -formed,因为它将选择一个'= delete`'ed的移动构造函数.最好只声明复制构造函数 - 在这种情况下,不会自动创建移动构造函数,因此你会没事的. (2认同)