【发布时间】:2012-12-09 21:16:52
【问题描述】:
我有一个抽象类,我从中继承。 为了清楚起见,我在继承器中实现了所有抽象方法。
使用继承类创建的对象后,我试图破坏它,但不是调用继承的析构函数,而是将我发送到抽象方法。
在我的程序中是这样的
class LinkedHash {
private:
LinkedHashEntry **table;
int max_size;
public:
/* Creates a hashtable of size maxSize*/
LinkedHash(int);
LinkedHash(){}
/* deletes all members of the hashtable */
virtual ~LinkedHash();
virtual int hashFunction(int key) = 0;
void insert(int key, Process* value);
void remove(int key);
int getMaxSize(){return max_size;}
LinkedHashEntry* search(int x);
};
class LinkedHashinheritor: public LinkedHash {
public:
LinkedHashinheritor():LinkedHash(1000){}
int hashFunction(int key);
};
这是我的cpp文件相关代码:
int LinkedHashinheritor::hashFunction(int key)
{
return key%1000;
}
还有对相关对象的构造函数和析构函数的调用:
Scheduler::Scheduler()
{tmp_lh=new LinkedHashinheritor();}
Scheduler::~Scheduler()
{
delete tmp_lh;
}
【问题讨论】:
-
您是否为您的基本析构函数提供了实现?您是否为派生类提供了析构函数?
-
您是否尝试过完全重建您的项目?如果头文件更改(例如,通过向类添加新的虚拟方法)并且包含该头文件的源文件没有被重新编译,有时可能会发生不好的事情。
-
是的,当然——我的基本析构函数已经实现。我什至没有为我的派生类声明析构函数,它应该由编译器自动调用,不是吗?
-
您不希望调用基类析构函数吗?如果是这样,那是不正确的期望。
-
声明派生类析构函数不能解决问题
标签: c++ inheritance destructor