- スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
720 :デフォルトの名無しさん[]:2016/05/12(木) 11:37:00.64 ID:ehHa3Ia2 - delete: 削除対象のインスタンスは1つのみなので、ポインタが指しているオブジェクトのデストラクタを実行すればよい。
delete[]: 削除対象のインスタンスは配列になっているので、オブジェクトの配列そのものだけではなく、 何回デストラクタを実行すればよいのかを保存しておく必要がある。 delete[] はそれを参照して、繰り返しデストラクタを走らす。 なので、 new int[10] したものを delete で削除してもそもそもデストラクタが存在しないので、 問題が発生することはまずないが、デストラクタで何らかの処理(暗黙、明示的な)をおこなう場合、 本来実行されるべきデストラクタが走らず問題となることがある。 (よく言う delete[] を使うべきところで delete を使うと、リークすることがあるというやつだ) >>719 new A[20] で確保されるのは A型20この配列で、結果はその配列へのポインタだろ。 これのどこに問題他あるんだ? (ポインタが配列なんじゃなく、ポインタが指す先が配列) また delete ptr; というのは ptr 自体を delete するわけではなく、 ptr が持っているポインタが 指している先のオブジェクトを delete するんだよな。 delete[] ptr 自体を delete するわけではなく、 ptrが指しているオブジェクトの配列を削除する。 つりだとしても面白くなさ過ぎるからいい加減にしろ。
|