私は例に出くわしました:
#include <iostream>
#include <stdexcept>
using namespace std;
class A{
public:
    A():m_n(m_object_id++){}
    ~A(){cout << m_n;}
private:
    const int m_n;
    static int m_object_id;
};
int A::m_object_id=0;
int main()
{
    A * const p = new A[3];
    A * const q = reinterpret_cast<A * const> (new char[3*sizeof(A)]);
    new (q) A;
    new (q+1)A;
    q->~A();
    q[1].~A();
    delete [] reinterpret_cast<char *>(q); // -> here
    delete[] p;
    cout << endl;
    return 0;
}
出力:
34210
誰かが説明できますかdelete [] reinterpret_cast<char *>(q); // -> here、それが何をしていて、出力を生成していますか?
編集
私の質問は、delete [] reinterpret_cast<char *>(q);なぜ~A(){cout << m_n;}そうdelete[] p;ですか?