newって、いらないんじゃないですかね?
会社の人とnew(キーワード)っていらないんじゃないですかね話をしていたときに、
C++に関して嘘を言っていた気がしたので家に帰ってから検証したらやっぱり嘘を言っていた。
嘘は「C++はnewを使わなくても実体化できるのですが、デフォルトコンストラクタ以外は呼べなかったような」。
まごう事なき嘘でした。
CHoge hoge = CHoge(1,1);
とか書けますね。
Pythonもnewを使わない方式ですが、こうやってオブジェクトを作れるのはSimpleで好きです。
C++の場合はstructureの延長という気がしますが。
で、こういった感じにかけばちゃんとスコープの終わりで解放されてデストラクタが呼ばれるわけですが、
ほぼこういう使い方はしなかったですね。
クラス内宣言して持つことはあっても、メインループ内ではせいぜいscoped_ptr。
newとかdeleteを書かないのは怖いから(=制御したいから)!!!(shared_ptrとかは別)
以下検証ソース。
class CHoge { public: CHoge(int a, int b) { _a = a; _b = b; printf("constructor_a_b?n"); } ~CHoge(){ printf("destructor(%d,%d)?n",_a,_b); } CHoge(){ _a = _b = 0; printf("constructor?n"); } private: int _a; int _b; }; int main(int argc, char *argv[]) { { CHoge hoge = CHoge(1,1); } CHoge* pHoge = new CHoge(); delete pHoge; return 0; }
結果はもちろん。
constructor_a_b
destructor(1,1)
constructor
destructor(0,0)