私はstd::shared_ptr
で作業しています。私のソフトウェア開発では、私はメモリ管理について疑問に思っているカップル に会いました。私は が私に関数からの生ポインタを与えたサードパーティのライブラリを持っていました。私は をstd::shared_ptr
に変換していました。(これはstdでブーストではありません。C++の未処理ポインタとstd :: shared_ptr
ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);
(のは、それが機能 内でローカルに宣言されたとしましょう、今、私は機能を終了しています):それでは、私は次のコードを持っているとしましょう。 が指し示しているので、ClassA
オブジェクトはまだ存在しますか?
理由:なぜshared_ptrは、shared_ptrがそれについて知る方法がないので、生ポインタを考慮しません。あなた自身がshared_ptrをどのように実装するのか考えてみると、データへの生ポインタがあるかどうかを検出できないことがわかります。 – Wutz
+1。また、これは 'shared_ptr'を作成するときと同じ行にオブジェクトを' new'する必要があるからです。さらに、['make_shared'](http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared) –
を使用してください。実のところ、未処理のポインタがあるかどうかを調べる方法がないことに同意しますオブジェクトを指しています。この場合、生ポインタは2番目のshared_ptrに渡した場合、最初のshared_ptrはまだinceaseになりますか? – ISTB