我试图按照这篇文章 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-outing 我指向的对象会创建一个副本,甚至执行类似的操作
CowPtr<string> my_cow_ptr(new string("hello world"));
const string& const_ref=*my_cow_ptr;
导致detach()
函数运行。
关于为什么它没有像宣传的那样工作的任何想法?