我有一个非常大的应用程序,它使用了许多线程(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总是没有被引发,我不确定使用初始化列表是否确实解决了我的问题。 编辑:它还没有解决问题。这个例外最终确实出现了。