Russian Qt Forum
Ноябрь 22, 2024, 12:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему RWO не вызывается при operator* указателя?  (Прочитано 3605 раз)
artur567297@gmail.com
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« : Август 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 вызывается конструктор копирования.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Август 04, 2022, 16:06 »

разница в объявлении твоей переменной: MyObect obect будет копировать присвоенный объект, а MyObect& obect будет сохранять ссылку.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.096 секунд. Запросов: 22.