2

我试图按照这篇文章 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()函数运行。

关于为什么它没有像宣传的那样工作的任何想法?

4

1 回答 1

1

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);
于 2013-04-20T18:45:43.423 回答