c++中,如果构造函数构造失败,如何终止并且不创建对象?

例如c++Primer plus第十章第一个例子。 设计一个表示股票的类,类里面私有数据是公司名,持股数量,股价,总值。还有一系列的公有函数接口。 初…
关注者
43
被浏览
34,541

22 个回答

标准做法是抛异常。

最直观的做法是抛异常,这种方式实现代码最简单直接。

如果异常不可用(例如有性能要求/ABI等原因), 私有 实现二段构造,然后封装个工厂。这样的缺点是可能和一些标准库组件不太好协作,实现也不特别直观。

几乎 没有 正当理由让用户手动调用二段式构造。手动二段构造破坏了RAII的基本保障,退化回了人工维护一致性的原始时代。

当然你要是把对象设计成可空的话倒是没有上述问题,但如果可空原本不是需求上必要的,引入空状态不过是换个恶魔签契约。