我的班级的成员是在创建对象时boost::scoped_ptr
设置的。(T*)0
该类有一个init()
方法,它实际上用一个新对象初始化智能指针。
但是,如果在该智能指针具有有效引用之前引发异常,它会非常不聪明地尝试删除 null(释放)或断言(调试)。
如何在不修改原始源代码的情况下让它在销毁时忽略空指针;并且,如果那不可能,是否有更合适的替代智能指针类来代替使用?
我的班级的成员是在创建对象时boost::scoped_ptr
设置的。(T*)0
该类有一个init()
方法,它实际上用一个新对象初始化智能指针。
但是,如果在该智能指针具有有效引用之前引发异常,它会非常不聪明地尝试删除 null(释放)或断言(调试)。
如何在不修改原始源代码的情况下让它在销毁时忽略空指针;并且,如果那不可能,是否有更合适的替代智能指针类来代替使用?
您可以尝试std::unique_ptr
代替boost::scoped_ptr
并提供一个自定义删除函数来检查底层对象的状态 - 请参阅http://en.cppreference.com/w/cpp/memory/unique_ptr。
boost::scoped_ptr 实际上忽略了其析构函数中的空指针。boost::scoped_ptr 使用 boost::checked_delete() 进行删除。boost::checked_delete() 使用 plaindelete
来删除(boost::checked_delete() 也检查 T 不完整)。
并且您可以使用 delete 删除空指针(与 不同free()
)。您确定错误确实在 boost::scoped_ptr 中吗?