构造函数中应该只进行那些 “ 没有实际意义的初始化 ”,可能的话,定义一个名为 Init() 的方法来初始化有意义的数据。
在构造函数中执行操作所引起的问题有:
⑴ 构造函数中不易报告错误,不能使用异常。
⑵ 操作失败会造成对象初始化失败,引起不确定状态。
⑶ 构造函数内调用虚函数,调用不会派发到子类实现中,即使当前没有子类化实现,将来仍是隐患。
⑷ 如果有人创建该类型的全局变量,构造函数将在 main()
之前被调用,有可能破坏构造函数中暗含的假设条件。(例如存在一个全局的 gflags 尚未初始化)
网友评论