Код: Выделить всё
#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 и почему он реализован именно таким образом?
Это не ответ на мой вопрос:
Каковы основные правила и идиомы перегрузки операторов?
Подробнее здесь: https://stackoverflow.com/questions/786 ... class-in-c