newした配列は最後にdelete[]を使って解放するわけですが、「何個解放するか」は誰が知ってるのか。 コンパイラによって異なると思いますが、GCC 4.6では先頭要素の1つ前にサイズが入ってました。 #include <iostream> struct X { X() { std::cout << "ctor" << std::endl; } ~X() { std::cout << "dtor" << std::endl; } }; int main() { const std::size_t n = 3; X* xs = new X[n]; std::cout << *(reinterpret_cast<std::size_t*>(xs) - 1) << std::endl; delete[] xs; } ctor ctor ctor 3 dtor dtor dtorただし、デストラ