コンストラクタとデストラクタの内部から仮想メソッドを呼び出すことでよく知られている問題のため、私は最終的に、コンストラクタの直後に呼び出されるfinal-setupメソッドを必要とするクラスと、ちょうど呼ばれるプリティアードメソッドそのデストラクタ前に、次のように:ポストコンストラクタとプリデストラクタ仮想メソッド呼び出しを実装する自動化された方法はありますか?
MyObject * obj = new MyObject;
obj->Initialize(); // virtual method call, required after ctor for (obj) to run properly
[...]
obj->AboutToDelete(); // virtual method call, required before dtor for (obj) to clean up properly
delete obj;
これは動作しますが、それはそれで呼び出し側が適切な時期に、これらの方法のいずれかまたは両方を呼び出すことを忘れてしまうリスクを運びます。
これは問題です:C++でこれらのメソッドを自動的に呼び出す方法はありますか?呼び出し元は呼び出しを覚えておく必要はありませんか? (私はそこにないと推測していますが、とにかく賢明な方法がある場合には、とにかく頼むと思っていました)
デストラクタにはどのような問題がありますか? – peterchen
実際の問題を説明する必要があるかもしれません。これらの呼び出しは実際には*必要ではないかもしれません。 – peterchen
ctorsまたはdtorsから仮想メソッドを "一般的に"呼び出す必要がある場合、大きな設計上の問題があるようです。これが必要なクラスの例を挙げることはできますか?ほとんどの場合、より簡単な解決策があります。 (通常どおり、私はRAIIが問題を解決することを期待しています。自分自身のctors/dtorsがそれぞれ独自の初期化/ティアダウンの部分を使って、1つ以上のメンバ変数に問題を委譲してください) – jalf