我使用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