この記事http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Copy-on-writeに従って 、C++ でコピー オン ライト ポインターを実装する方法を試してみました。問題は、それがうまくいかないことです。
オブジェクトの核心は、逆参照演算子 (*) をオーバーロードして、非 const 参照を返す必要がある場合にバックグラウンド コピーを行うことです。
const T& operator*() const
{
return *m_sp;
}
T& operator*()
{
detach();
return *m_sp;
}
残念ながら、これまでに実行されたのは 2 番目のバージョンだけのようです。指し示したオブジェクトをCアウトすると、次のようなことをしてもコピーが作成されます
CowPtr<string> my_cow_ptr(new string("hello world"));
const string& const_ref=*my_cow_ptr;
detach()
関数を実行させます 。
宣伝どおりに機能しない理由について何か考えはありますか?