shared ptr — объект указателя копирования при записи в стеке переполнения

Я пытался следовать этой статье
http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Copy-on-write о том, как реализовать копирование на указатели записи в C ++. Проблема в том, что это не работает для меня.

Суть объекта заключается в перегрузке оператора разыменования (*) для выполнения фонового копирования, если он должен возвращать неконстантную ссылку:

   const T& operator*() const
{
return *m_sp;
}
T& operator*()
{
detach();
return *m_sp;
}

К сожалению, кажется, что запускается только вторая версия.
C-out мой объект-указатель создает копию, даже делая что-то вроде

   CowPtr<string> my_cow_ptr(new string("hello world"));
const string& const_ref=*my_cow_ptr;

вызывает detach() функция для запуска.

Любые идеи о том, почему это не работает, как рекламируется?

2

Решение

const функция-член будет вызываться на const объект. так:

const CowPtr<std::string> my_const_cow_ptr(new std::string("Hello, world"));
const std::string& str = *my_const_cow_ptr;

или же

CowPtr<std::string> my_cow_ptr(new std::string("Hello, world"));
const std::string& str = *static_cast<const CowPtr<std::string>&>(my_cow_ptr);
1

Другие решения

Других решений пока нет …