在分配scoped_ptr之前处理异常

时间:2012-10-16 06:39:13

标签: c++ exception boost smart-pointers

我的班级成员是boost::scoped_ptr,在创建对象时设置为(T*)0。该类有一个init()方法,它实际上用一个新对象初始化智能指针。

但是,如果在之前引发异常,智能指针具有有效引用,则它会非常巧妙地尝试删除null(release)或断言(debug)。

如何在破坏时忽略空指针而不修改原始源代码;并且,如果不可能,是否有更适合使用的备用智能指针类?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用std::unique_ptr代替boost::scoped_ptr并提供自定义删除功能来检查基础对象的状态 - 请参阅http://en.cppreference.com/w/cpp/memory/unique_ptr

答案 1 :(得分:1)

boost :: scoped_ptr实际上忽略了析构函数中的空指针。 boost :: scoped_ptr使用boost :: checked_delete()进行删除。 boost :: checked_delete()使用plain delete来删除(boost :: checked_delete()也检查以便T不完整)。

您可以删除带删除的空指针(与free()不同)。你确定错误确实在boost :: scoped_ptr?