私は現在、コードベースのすべての悪い習慣を見つけ、仲間に害のあるコードを修正するよう説得しています。私の洞窟探検中に、私はここで多くの人が次のパターンを使用していることに気づい:コンストラクタではなく "initialize()"メソッドに対する引数
class Foo
{
public:
Foo() { /* Do nothing here */ }
bool initialize() { /* Do all the initialization stuff and return true on success. */ }
~Foo() { /* Do all the cleanup */ }
};
今、私は間違っているかもしれませんが、私には、このinitialize()
方法の事はひどいです。私はそれがコンストラクターを持つことの全目的を取り消すと信じています。
私は同僚にこのデザイン決定がなされた理由を尋ねると、スローなしでコンストラクタを終了することができないので、常に選択肢がないと答えています(スローするとはは常にです)。
私は貴重な議論が不足していると私は認めています。だからここに私の質問があります:私はこの構造が痛みであると思います。 ?
ありがとうございます。
FTRが、これは2相の初期化として知られています。 –
ここに明白な疑問があります:建設が失敗した場合、あなたの同僚は途中で作られたオブジェクト*で何をしたいのですか?無駄だ。それはまた、建設の例外を投げたかもしれません – jalf
@ jalf:確かに良い点。 – ereOn