Как реализовать оператор-> для пользовательского класса UniquePtr в C++? [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Как реализовать оператор-> для пользовательского класса UniquePtr в C++? [дубликат]

Сообщение Anonymous »

Я пытаюсь написать собственную реализацию unique_ptr на C++, и вот мой заголовочный файл UniquePtr:

Код: Выделить всё

#include 

template 
class UniquePtr
{
T* ptr;

public:
UniquePtr(T* _ptr);

UniquePtr(const UniquePtr& other) = delete;
UniquePtr& operator=(const UniquePtr& other) = delete;

UniquePtr(UniquePtr&& dying) noexcept;
UniquePtr& operator=(UniquePtr&& dying) noexcept;

T& operator*();
const T& operator*() const;

/*??? operator->()
{

}*/

/*??? operator->() const
{

}*/

~UniquePtr();
};

Я не понимаю, какой оператор-> должен возвращать. Я знаю, что вызов в форме uniquePtr->member транслируется в (*uniquePtr).member, но это все равно не помогает мне понять, что должен вернуть оператор->.
Я Поймите, что операторы — это, по сути, функции со специальным именем, поэтому мы можем думать о -> как о функции, которая принимает только один аргумент — указатель на объект (который получают все функции-члены). Однако меня немного смущает то, как перевод вызова uniquePtr->member должен определять способ его переопределения в классе (каким должен быть тип возвращаемого значения).
Может ли кто-нибудь объяснить, как реализовать оператор-> для этого специального класса UniquePtr и почему он реализован именно таким образом?
Это не ответ на мой вопрос:
Каковы основные правила и идиомы перегрузки операторов?

Подробнее здесь: https://stackoverflow.com/questions/786 ... class-in-c

Вернуться в «C++»