我的班级成员是boost::scoped_ptr
,在创建对象时设置为(T*)0
。该类有一个init()
方法,它实际上用一个新对象初始化智能指针。
但是,如果在之前引发异常,智能指针具有有效引用,则它会非常巧妙地尝试删除null(release)或断言(debug)。
如何在破坏时忽略空指针而不修改原始源代码;并且,如果不可能,是否有更适合使用的备用智能指针类?
答案 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?