0

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

4

0 回答 0