C++ を使用してガベージ コレクション ライブラリを作成しています。そこでは、オブジェクトのデストラクタがファイナライザとして機能し、オブジェクトのメモリが解放されるときにオブジェクトの内部データを解放します。ポインタ アドレスは、セット ( std::set
) に符号なし整数として格納されます。
std::set<unsigned int> addresses;
C1* c1 = new C1();
C2* c2 = new C2();
addresses.insert(*c1);
addresses.insert(*c2); // so now pointer's addresses are stored in the set
オブジェクトを解放する必要がある場合は、デストラクタを呼び出したい:
std::set<unsigned int>::iterator it = addresses.begin(); // for example delete the first one
/* 1st variant */ delete *it; // not working, because "unsigned int is not a pointer type"
/* 2nd variant */ delete (void*)(*it); // frees memory, but doesn't call the destructor.
私が知っている唯一のことが符号なし整数として格納されているそのアドレスである場合、原則としてオブジェクトのデストラクタを呼び出すことは可能ですか?
設計段階でミスをしたのではないでしょうか?オブジェクトにはさまざまな型があり、必要に応じてメモリを解放するためにアドレスを保存する必要がありますが、それらのデストラクタも呼び出す必要があります。どうすればこれに対処できますか?