今日のって、もう昨日の横浜勉強会から時既に12時間ほどが経過していますが、忘れないうちにεπιστημηさんのセッションで出てきたnew / delete 血の掟を簡単にまとめておきます。最後のケース6は、勝手に追加。やっちゃダメですよね??
class Hoge { public: void func(){} };
int main()
{
{ // 正しい new/delete の使い方
Hoge* p = new Hoge();
p->func();
delete p;
}
{ // 正しい new[]/delete[] の使い方
Hoge* p = new Hoge[10];
p[0].func();
delete[] p;
}
{ // 間違いケース1:お別れの挨拶を
Hoge* p = new Hoge();
p->func();
}
{ // 間違いケース2:なりすましに注意
Hoge* p = new Hoge();
p->func();
p = new Hoge();
p->func();
delete p;
}
{ // 間違いケース3:お別れし過ぎ
Hoge* p = new Hoge();
p->func();
delete p;
// ... いろいろあって ...
delete p;
}
{ // 間違いケース4:未練を残すな
Hoge* p = new Hoge();
delete p;
p->func();
}
{ // 間違いケース5:強欲
Hoge* p = new Hoge[10];
p[10].func();
delete[] p;
}
{ // 間違いケース6:すべて清算せよ
Hoge* p = new Hoge[10];
delete p;
}
return 0;
}
間違えたときは、核ミサイルが発射され、家賃の振込が物凄い額で振り込まれ、消したはずの恥ずかしいアレが消えなかったり、いやむしろ、まぁくんのお母さんに見つかる場所に自動で移動したり、もう何が起きても不思議ではありません。えぇ、ですから、掟をやぶったら、何がオキテもしょうがありません。えぇ、仕様がありませんから。