bob*_*obo 5 language-agnostic constructor
我正在审查一些代码,我看到了很多这样的代码:
class Foo
{
public:
Foo()
{
// 'nuffin
}
void init()
{
// actual construction code
}
} ;
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一优势是,如果你在不使用指针的情况下创建一个Foo,并且想要将其构造代码延迟到以后,那么你可以.
这是一个好主意还是一个坏主意?
总的来说,我同意这是应该避免的事情。但到目前为止,所有答案都没有解决初始化可能失败的可能性。构造函数不能失败,因此,如果构造函数分配内存、打开文件或执行任何其他可能失败的操作,则需要一种方法来告诉调用者发生了错误。如果在构造函数中进行初始化,则需要有一个标志来指示初始化是否成功,然后确保调用者检查该标志。
如果您有一个单独的 init() 例程,必须在其他任何操作之前调用该例程,则调用者更有可能检查返回代码,而不是didInitializationSucceed()在创建对象后调用方法。