私はBoostライブラリからスマートポインタを使用します。私はこのオブジェクトがあると:クラスBでC++:boost:値渡しパラメータ
boost::shared_ptr<A> a(new A);
a->fileName = "/temp";
を、私は:
bool open(A *a);
と
private: boost::shared_ptr<A> myA;
をその後IがオブジェクトBを宣言する:
boost::shared_ptr<B> b(new B());
b->open(a.get());
bool B::open(A *a)
{
*B::myA = *a;
}
上記のデモンストレーションは値渡しについてのものです。 ter。コンパイルは結構ですが、私はそれを実行すると、それはこのエラーを与えた:
/usr/local/include/boost/smart_ptr/shared_ptr.hpp:412: typename boost::detail::shared_ptr_traits<T>::reference boost::shared_ptr<T>::operator*() const [with T = NameSpaceABC::Common::A]: Assertion `px != 0' failed.
Aborted
そして、上記と同じ質問に対して、私が持っているために何を変更する必要があります参照パラメータで渡しますか?私がC#とJavaプログラマであるので、私はちょうどクイックプロジェクトのためにC++に切り替えました。私はポインタとブーストスマートポインタを使用することに精通していない。
ご協力いただきありがとうございます。ご協力いただきありがとうございます。
'VImageInputStream :: open'をデバッグして、' a 'のどちらかの値が0かどうかを確認しましたか?ブーストアサーションは非常に明確です:あなたは空の 'shared_ptr'を逆参照しています。 – icecrime
こんにちは、私は以下のSpace_C0wb0yから答えをチェックしました。それは正常に動作していますが、私はそれが値渡しパラメータまたは参照渡しパラメータであるかどうか不明ですか?スマートポインタのデストラクタで 'delete'を書く方法。事前に感謝します – olidev
スマートポインタの「スマートな」部分は、もはや 'delete'を書く必要がないということです。彼らはあなたのためにそれをやるでしょう。最後の 'shared_ptr 'がなくなると、Aオブジェクトが削除されます。 – MSalters