FAQ по C++ от Страуса: "Акелла промахнулся", или я что-то недопонял?
От: slava_phirsov Россия  
Дата: 29.10.13 14:08
Оценка:
Доброго времени суток!

Вот, перечитывая D&E, Страуструп пишет, что он, случалось, забывал проверку на присвоение объекта самому себе в ранние годы C with classes, когда он только начинал обдумывать семантику деструктивного присваивания. Тут решил глянуть сабж, и увидел такое:

template<class T>
    class Handle {
        T* p;
    public:
        Handle(T* pp) : p{pp} {}
        ~Handle() { delete p; } // user-defined destructor: no implicit copy or move 

        Handle(Handle&& h) :p{h.p} { h.p=nullptr; }; // transfer ownership
        Handle& operator=(Handle&& h) { delete p; p=h.p; h.p=nullptr; return *this; } // transfer ownership

        Handle(const Handle&) = delete; // no copy
        Handle& operator=(const Handle&) = delete;

        // ...
    };


Я таки не понял, в выделенном опять же нет проверки на присваивание самому себе: это опечатка, или как?

Handle<int> foo(new int(10));
Handle<int>& bar = foo;

// ... много-много кода

foo = std::move(bar); // Ужас. Или все-таки нет?
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.