生のポインタメンバーをスマートポインタにラップして、開発中のクラスを削除しないようにしたいと思います。ポインタの下にあるオブジェクトの所有者はクラス外です。だから、boost::shared_ptr
とstd::auto_ptr
のように見えません。以下は縮小例です。生ポインタからweak_ptr <>を作成する
class Foo {
boost::weak_ptr<Bar> m_bar;
public:
void setBar(const Bar *bar) { // bar created on heap
m_bar = bar; // naturally compilation error
}
};
もちろん、コンパイルエラーが発生します。生ポインタ(存在する場合)からweak_ptr
を初期化する正しい方法は何ですか?
可能複製を行うことができますですコンバージョン](http://stackoverflow.com/questions/17522020/shared-ptr-weak-ptr-conversions) –
あなたのクラス内でそのポインタを削除しないようにするには、 'delete'を呼び出さないでください。クライアントへのポインタを公開するアクセサ関数を提供しないでください。 'weak_ptr'は、' shared_ptr'が所有するオブジェクトを所有していないビューのためのものです。あなたが何とかそのポインタを 'weak_ptr'に入れることができたなら、ポインタが期限切れになったかどうか分からなくても、クラス内で' delete m_bar.lock()。get(); 'を呼び出すこともできません。すべてのことを100%馬鹿にすることは決してできません。 – Praetorian