配列へのスマートポインターを作成したい場合、最善の方法は使用することであることを十分に認識しています
boost::shared_array<T>( new T[20] );
私が理解していないのは、この型の共有ポインタが範囲外になったときに発生するクラッシュです。
boost::shared_ptr<T>( new T[20] );
上記のコードは、他の要素をそのままにして配列の最初の要素で削除を呼び出すため、リークが発生すると常に考えていましたが、そうではなく、セグメンテーション違反があります。
理由を理解するのを手伝ってもらえますか? 共有ポインターを使用せずにプレーンなバニラポインターを使用すると、最悪の動作になります
CMyClass *p = new CMyCLass[10];
///....do stuff
delete p;
*** glibc detected *** ./test: munmap_chunk(): invalid pointer: 0x088eb00c ***