![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 04.08.2022
Сообщений: 1
|
![]()
Здравствуйте. Оператор уникального указателя 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 вызывается конструктор копирования. |
![]() |
![]() |
![]() |
#2 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,041
|
![]()
artur567297gmail, для RVO нужно возвращать объект по значению.
А тут - возвратилась бы ссылка, если бы метод сам был не константный. Но, поскольку он константный, а вернуть нужно неконстантную ссылку, то (как мне кажется - точно сказать не могу) делается копия, и возвращается ссылка на временный объект (то есть, насколько я понимаю, это UB ) должно быть так Код:
Последний раз редактировалось Алексей1153; 04.08.2022 в 20:43. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[РЕШЕНО][Delphi] Ошибка 'Operator not applicable to this operator type'. Почему? Есть код. | IlyaHistorik | Помощь студентам | 3 | 21.10.2017 19:37 |
Почему деструктор вызывается два раза? | 220Volt | Общие вопросы C/C++ | 18 | 09.01.2014 21:55 |
Почему при перегруженных = и +, вызывается... | WebbMan | Общие вопросы C/C++ | 18 | 13.12.2012 01:15 |
Почему вызывается деструктор? | MrGukk | Общие вопросы C/C++ | 13 | 23.08.2012 17:42 |
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> | Critter | Общие вопросы C/C++ | 5 | 08.08.2010 23:38 |