1

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

但是,如果在该智能指针具有有效引用之前引发异常,它会非常不聪明地尝试删除 null(释放)或断言(调试)。

如何在不修改原始源代码的情况下让它在销毁时忽略空指针;并且,如果那不可能,是否有更合适的替代智能指针类来代替使用?

4

2 回答 2

2

您可以尝试std::unique_ptr代替boost::scoped_ptr并提供一个自定义删除函数来检查底层对象的状态 - 请参阅http://en.cppreference.com/w/cpp/memory/unique_ptr

于 2012-10-16T06:42:05.343 回答
1

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

并且您可以使用 delete 删除空指针(与 不同free())。您确定错误确实在 boost::scoped_ptr 中吗?

于 2012-10-16T06:54:09.060 回答