Перегрузка оператора разыменования
От: theCreature  
Дата: 14.08.10 17:23
Оценка:
Взялся я за создание смартпоинтера, реализующего copy-on-write и в процессе наткнулся на непонятные для себя грабли. Почему-то компилятор совершенно игнорирует наличие константного перегруженного оператора разыменования, в результате чего рушится вся концепция копирования при записи. Приведу пример максимально упрощенного кода, показывающего проблему:

#include <iostream>

class A {
public:
    A(int value) : _value(value) { }
    
    const int &operator *() const
    {
        std::cout << "const int &A::operator *() const" << std::endl;
        return _value;
    }

    int &operator *()
    {
        std::cout << "int &A::operator *()" << std::endl;
        return _value;
    }

private:
    int _value;
};

int main()
{
    A a = 10;
    int v = *a;

    return 0;
}


При запуске программа выводит "int &A::operator *()", а должна на мой взгляд выводить "const int &A::operator *() const". Подскажите, где моя ошибка? Я даже пробовал сделать
int v = const_cast<const int &>(*a);

но безрезультатно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.