Переместить дилемму ctor - PullRequest
2 голосов
/ 23 ноября 2010

Чтобы отключить копирование моего класса, я должен объявить его закрытым, но не определять operator=(const MyClass&) и MyClass(const MyClass&) - нужно ли также отключить Move Ctor для этого класса?

Ответы [ 2 ]

5 голосов
/ 23 ноября 2010

До сих пор неясно, будут ли конструкторы перемещения генерироваться неявно (и когда).

См. этот PDF от Stroustrup от 2010-10-17 с подзаголовком . Должны ли операции перемещения быть сгенерированы по умолчанию? Кстати, в C ++ 0x вы можете = delete функций, а не делать их частными и неопределенными.

class non_copyable {
    public:
    non_copyable(const non_copyable&) = delete;
    non_copyable& operator=(const non_copyable&) = delete;
};
0 голосов
/ 23 ноября 2010

Цитирование из документации VS 2010 :

В отличие от конструктора копирования по умолчанию, компилятор не предоставляет конструктор перемещения по умолчанию.

Так что для VS 2010 не нужно это скрывать.Они специально не обсуждают операторы присваивания перемещений по умолчанию, но я предполагаю, что они тоже не будут генерировать.

...