Здравствуйте. Оператор уникального указателя 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 вызывается конструктор копирования.