class MyClass {
public:
//....
MyClass& operator=(MyClass& other)
Неконстантный other
в задании - плохая идея, и он может легко удивить программиста.Большинство программистов не ожидают, что правая часть присвоения будет видоизменена.
Также это не скомпилирует:
MyClass obj;
obj = MyClass(); // error
Для того, чтобы это скомпилировать, вы должны использовать семантику перемещения, котораяВероятно, это то, что вы имели в виду с самого начала: class MyClass2 {public: // .... MyClass2 & operator = (const MyClass2 & other) = delete;MyClass2 & operator = (MyClass2 && other)
&& означает, что other
может быть очищен в процессе:
MyClass2 obj, obj2, obj3;
obj = MyClass2(); // ok. Will be moved
obj2 =std::move(obj); // ok
obj3 = obj2; // error, not an rvalue rference (not MyClass2 &&)
Убедитесь, что два объекта не содержат одинаковый дескриптор.Убедитесь, что копия и назначение удалены, и переместите назначение и переместите конструктор, чтобы аннулировать дескриптор правой стороны.
Ваш объект должен иметь дескриптор.У ручки должен быть только один владелец.