我正在使用 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.
原则上是否可以调用对象的析构函数,如果我唯一知道的是它的地址,它存储为无符号整数?
也许我在设计阶段犯了一个错误?对象有不同的类型,我必须存储它们的地址以在必要时释放内存,但我还需要调用它们的析构函数。我该如何处理?