引用:
作者: bankrock 另外一个存储CBase的容器怎么能存放指向Interface的指针呢?这和C++的强类型机制不符合 |
我看了下管理器的代码,有个重载的版本,接受void*指针的对象。释放时,仅仅free内存,而不调用dtor。如果希望释放时调用dtor,就需要通过模板把类型信息告诉管理器:
c++ 代码:
class CleanupManager{
static void add(CBase* p);
static void add(void* p);
static void add(CleanupItem& x);
};
...
template <class T>
void addWithDelete(T* p){
CleanupManager::add(CleanupItem<T>(p));
}
template <class T>
void CleanupItem<T>::Delete(void* p){
delete static_cast<T*>(p);
}
另外,我正在google这些问题:多继承时vtable是什么样子的?为什么对着Base2的指针delete,Base1的dtor也会得到调用?如果所有基类都有virutal dtor,那么就会按照继承树的关系一层一层调用到所有基类,届时各个兄弟基类dtor的调用顺序会是什么样子的?