清除取消对象创建的方法

时间:2011-09-29 10:33:13

标签: c++ object new-operator

我想知道如何停止/取消对象的创建,由new()提升。也许如果某些先决条件失败并且不需要该对象。

  • new之前检查?
  • 在构造函数内检查,返回null或特殊内容,不知道如何处理......
  • new成功并且对象存活后检查。调用成员函数myObj->Init()。如果失败会破坏对象?

4 个答案:

答案 0 :(得分:14)

以上都不是。

如果由于未满足的条件而无法构造对象,则构造函数应该使用throw语句抛出异常。

答案 1 :(得分:4)

  

new之前检查?

如果您的前置条件可以在对象自己的内部范围之外进行验证,并且如果它们在调用范围内在语义上属于,那么确定......这很棒!

  

在构造函数中检查,返回null或特殊的东西,不知道如何处理......

在构造函数中检查,并抛出异常。像处理任何其他异常一样处理它。 最佳方法。

  

new成功并且对象存活后检查。调用成员函数myObj->Init()。如果失败会破坏对象?

以这种方式放弃RAII是向后步骤

答案 2 :(得分:2)

抛出对象构造函数的异常。请注意,与operator delete不同,对象的析构函数将被调用,而{{1}}将自动调用以回收已分配的内存。

答案 3 :(得分:-1)

也许最好使轻量级构造函数始终成功,而初始化函数会导致繁重的工作并在出错时抛出异常。

修改即可。经过一些批评性反馈,我发现为什么我的建议不符合RAII要求: “在初始化期间获取资源,在它们可用之前没有机会被使用”。

我不会更改我的原始帖子,将此作为典型的设计错误示例可能会有所帮助。