別の回答がすでに受け入れられていることは承知していますが、メモリ配列を非常に単純に追跡したい場合は、独自のアロケーターを作成する方法を次に示します。
#include <map>
#include <iostream>
using namespace std;
map<void*,size_t> memmap; //put this as a global variable in an implementation file, and extern it in the header file.
class MyManagedClass{
public:
MyManagedClass(){}
void* operator new[](size_t sz){
void* out = operator new(sz*sizeof(MyManagedClass));
for(size_t i=0; i<sz; ++i)
*((MyManagedClass*)out+sz)=MyManagedClass::MyManagedClass();
memmap[out] = sz;
return out;
}
void operator delete[](void* t){
cout << "Freed units: " << memmap[t] << endl;
memmap.erase(t);
delete[] t;
}
};
int main(){
MyManagedClass* ip = new MyManagedClass[10];
delete[] ip;
system("pause");
}
私はこれがそれを行うための厄介な方法であり、おそらくテンプレートとより考え抜かれたメモリ設計を使用して、より適切/一般的にすることができることに言及する必要があります笑。