単に new[] と対にしたかっただけなのか。
delete a;としたときはa[0]が解放されるだけ という説明も意味がわからない。a[0]だけを解放する手段なんてそもそも無いのに。つーか、delete a;は未定義だしなんかアボートするし
delete a;を文法エラーにしない理由もわからない。delete a;が正しく動作し意味があるサンプルコードが無い以上、せめてwarning出すくらいのことは必要なはず。
new char[5];も意味が不明。クラスじゃないんだからmalloc()で充分だと思う。
C/C++は未定義と不定が多すぎる。ルールの知識を競うゲームじゃないんだから、全部きっちり定義すべき。
stringPtr2に対して、[]を付けずにdeleteを適用したらどうなるでしょう。その場合でも、結果は未定義なのです。 しかし、いずれにしても、呼び出されるデストラクタは1つだけでしょう。
Effective C++ 16項 対応するnewとdeleteは同じ形のものを使おう
なお、これがクラスのオブジェクトではなく、intのようなデストラクタを持たない組み込み型の配列であっても、結果は未定義(ときには、危険)になります。
#include <iostream> using namespace std; class AAA{ public: AAA(){ cout << "new" << endl; } virtual ~AAA(){ cout << "delete" << endl; } }; int main(){ char *hoge = new char[5]; delete[] hoge; AAA *a = new AAA[5]; delete[] a; cout << "end" << endl; return 0; }