今回はC++の初歩的な質問をさせていただきたく、トピックを立てました。
最近、C++でコードを書く際、デストラクタに何も記述しないことが多くなりました。
昔はデストラクタに色んな終了処理(DirectXだったらRelease関数呼んだり)していたのですが、
それも自分で作った終了処理用関数(Finalize()とします)を呼ぶことでやるようにしています。
そうしている内に、ふと「せっかくC++使ってるのにデストラクタ使わないのおかしくね?」と今日思いました。
デストラクタに何も書かなくなった経緯なのですが、
デストラクタで終了処理やるなら、コンストラクタで初期化したほうがわかりやすいだろう→
初期化するには様々な引数が必要になる事が多々ある→
コンストラクタで初期化しているクラスを別のクラスにメンバとして持つだけでは、当然エラーになる→
エラー回避の為にコンストラクタの引数がどんどん増える→
ので、初期化は自分で関数(Initialize()とします)を作る→
Initialize()で初期化したなら、Finalize()を作るべき
という流れです。で、つい最近まで、Finalize()とデストラクタに全く同じコードを記述していました。
// SafeRelease()はテンプレート関数
class Hoge
{
private:
デバイスポインタ pDevice;
public:
Hoge():pDevice(nullptr){}
~Hoge(){SafeRelease(pDevice);} // ここ同じ
Initialize( なんか引数);
Finalize(){SafeRelease(pDevice);} // ここ同じ
}
と思い、今では、デストラクタには何も書かなくなりました。
皆さん、C++でコードが書く際、初期化と終了処理をどうしていますか?
自分の中では、コンストラクタは引数なしで、メンバの初期値を終了する(ほとんどNULLか0)場、デストラクタではなにもしない。
としていますが、これってどうなんでしょうか?
C++初めて3年経ち、いまさら聞けない内容なのですが、聞かぬは一生の恥だと思い質問しました。
よろしくお願いします。