Russian Qt Forum

Программирование => С/C++ => Тема начата: artur567297@gmail.com от Август 04, 2022, 15:28



Название: Почему 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 будет сохранять ссылку.