Название: Почему RWO не вызывается при operator* указателя? Отправлено: artur567297@gmail.com от Август 04, 2022, 15:28 Здравствуйте. Оператор уникального указателя operator* при возвращении объекта для которого указатель был создан возвращает копию объекта а должен вроде ссылку?
Например: Я создал указатель для объекта: unique_ptr<MyObect> my_pointer(new MyObect ()); Далее получаю ссылку на сам класс MyObect с помощью указателя my_pointer: MyObect obect = *my_pointer – и вот здесь почему то не вызывается rwo а вызывается конструктор копирования класса MyObect а мне нужно получить саму ссылку. В классе unique_ptr есть переопределенный оператор * - этот оператор ведь должен возвращать ссылку на объект без вызова всяких конструкторов копирования? Но почему то возвращает именно копию. Я для примера создал свой класс уникального указателя вот его код: template <typename T> class smart_pointer { private: T* rawPtr; public: smart_pointer(T* pData) : rawPtr(pData) {} ~smart_pointer() { delete rawPtr; }; T& operator* () const { return *(rawPtr); } T* operator-> () const { return rawPtr; } }; Здесь обратите внимание на T& operator* - все условия для вызова RWO есть: одна инструкция, нужный тип в итоге должно сработать rwo и вернуться сама ссылка но нет тоже как и в unique_ptr вызывается конструктор копирования. Название: Re: Почему RWO не вызывается при operator* указателя? Отправлено: kambala от Август 04, 2022, 16:06 разница в объявлении твоей переменной: MyObect obect будет копировать присвоенный объект, а MyObect& obect будет сохранять ссылку.
|