Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化列表是实例化boost::shared_ptr的更好方法吗?_C++_Boost_Shared Ptr_Initialization List - Fatal编程技术网

C++ 初始化列表是实例化boost::shared_ptr的更好方法吗?

C++ 初始化列表是实例化boost::shared_ptr的更好方法吗?,c++,boost,shared-ptr,initialization-list,C++,Boost,Shared Ptr,Initialization List,我有一个相当大的应用程序,它使用了许多线程(boost)、opencv、opengl和qt 我开始对其中一个boost::shared_ptr对象产生问题 在应用程序的某些执行中,boost::shared_ptr指针并不总是指向无效位置,导致读取该位置的未处理异常 由于这种行为并不一致,我猜测boost::shared_ptr初始化可能有问题 这篇文章中的一条评论:建议使用初始化列表来初始化boost::shared\u ptr。Boost的文档还说,共享make_更快,而且异常安全。我使用的

我有一个相当大的应用程序,它使用了许多线程(boost)、opencv、opengl和qt

我开始对其中一个boost::shared_ptr对象产生问题

在应用程序的某些执行中,boost::shared_ptr指针并不总是指向无效位置,导致读取该位置的未处理异常

由于这种行为并不一致,我猜测boost::shared_ptr初始化可能有问题

这篇文章中的一条评论:建议使用初始化列表来初始化boost::shared\u ptr。Boost的文档还说,共享make_更快,而且异常安全。我使用的是Boost 1.53.0

根据该指导原则,我从构造函数中删除了初始化:

FrameObject::FrameObject(){
//initialization code
_contour = boost::make_shared<Contour>(); //Contour is a user defined object encapsulating a CvSeq* pointer.
FrameObject::FrameObject(){
//初始化代码
_contour=boost::make_shared();//contour是一个用户定义的对象,封装了CvSeq*指针。
并改为使用初始化列表:

FrameObject::FrameObject():
_contour(boost::make_shared<Contour>()){
//other initialization code
}
FrameObject::FrameObject():
_轮廓(boost::make_shared()){
//其他初始化代码
}
到目前为止,使用初始化列表显然解决了我的问题 .但由于未处理的异常并不总是被引发,我不确定使用初始化列表是否确实解决了我的问题。
编辑:它没有解决问题。最终出现了异常情况。

您应该始终使用成员初始化列表。这与共享\u ptr无关。您的问题在这里肯定是不相关的。很可能,您并不是仅通过
共享\u ptr
来管理对象生命周期-我想代码中有些地方您试图
手动删除此对象。这是使共享的ptr指向无效实例的最可能的方法。不,我没有这样做。我不会在任何实例中删除轮廓对象(参见上面的代码)。但是,应用程序有点旧,以前的开发人员没有保存任何文档(除了这里和那里的一些评论外),所以我必须深入到角落和凹处,看看是否有针对共享的ptr的删除。但我相当肯定没有。不过谢谢你的指针!:P