我使用Boost庫中的智能指針。假設我有此對象:C++:boost:按值傳遞參數
boost::shared_ptr<A> a(new A);
a->fileName = "/temp";
在B類,我有:
bool open(A *a);
和
private: boost::shared_ptr<A> myA;
然後我聲明對象B:
boost::shared_ptr<B> b(new B());
b->open(a.get());
bool B::open(A *a)
{
*B::myA = *a;
}
上面的示例是關於傳遞值參數之三。編譯是好的,但是當我運行它,它給了這個錯誤:
/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++。我不熟悉使用指針和Boost智能指針。
在此先感謝,我非常感謝您的幫助!
您是否嘗試調試`VImageInputStream :: open`來查看`a`的`myA`是否爲0? boost聲明非常明確:您正在取消引用空的`shared_ptr`。 – icecrime 2010-11-23 09:59:25
嗨,我已經檢查了下面的Space_C0wb0y的答案。它工作正常,但我不確定它是否爲值傳遞參數或引用傳遞參數?以及如何在智能指針的析構函數中寫入'delete'。在此先感謝 – olidev 2010-11-23 10:08:13