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

时间:2013-06-25 11:28:16

标签: c++ boost shared-ptr initialization-list

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

我开始遇到boost :: shared_ptr<>之一的问题对象。

在应用程序的某些执行中,并非总是如此,boost :: shared_ptr指针用于指向无效位置,导致读取该位置的UnhandledException。

由于这种行为不一致,我的猜测是,不知何故boost :: shared_ptr初始化存在问题。

这篇文章中的评论:Boost shared pointer initialization表明初始化列表是初始化boost :: shared_ptr的推荐方法。 Boost的文档还说make_shared更快,异常安全。我正在使用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>()){
//other initialization code
}

<击> 至于现在,使用初始化列表显然已经解决了我的问题 。但由于UnhandledException总是没有被引发,我不确定使用初始化列表是否确实解决了我的问题。 编辑:它还没有解决问题。这个例外最终确实出现了。

0 个答案:

没有答案