【发布时间】:2012-10-16 06:39:12
【问题描述】:
我的班级成员是boost::scoped_ptr,在创建对象时设置为(T*)0。该类有一个init() 方法,它实际上用一个新对象初始化智能指针。
但是,如果在智能指针具有有效引用之前抛出异常,它会非常不聪明地尝试删除 null(释放)或断言(调试)。
如何让它在销毁时忽略空指针而不修改原始源代码;并且,如果这不可能,是否有更合适的替代智能指针类来代替使用?
【问题讨论】:
-
我怀疑您的代码有其他问题。
delete 0完全有效(并且什么都不做)。请添加一个重现问题的最小测试用例。 -
那么在调用
init之前,这种类型的对象在出现异常的情况下不能正常工作?那么只是将init转换为构造函数,甚至没有这样的无效对象呢?除此之外,Mankarse 是正确的,delete 0没什么不好,而且它本身也不是那么不聪明(实际上它比事先进行手动检查更聪明),并且并不真正花费任何成本. -
@ChristianRau - 在紫红色的回答下查看我的评论。这是我的代码中的逻辑。我是一个糟糕的程序员,在发布之前没有单步执行代码:] 我做了一些测试用例,是的,Mankarse 是正确的。
标签: c++ exception boost smart-pointers