Я пытался следовать этой статье
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()
функция для запуска.
Любые идеи о том, почему это не работает, как рекламируется?
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);
Других решений пока нет …