Gio*_*Gio -2 c++ inheritance virtual-destructor
在C++中,我们可以在头文件中完美地声明一个函数,而无需实际实现它.这编译很好,通常这不会提供任何问题,但是...我想知道它是否可以在未实现虚拟析构函数时导致问题.
当没有实现虚拟析构函数时,在这种情况下我们通过基类的指针删除派生类的实例,派生类的析构函数是否仍然会被调用?
例如
class Base{
public:
virtual ~Base() {}
};
class Derived: public Base {
public:
~Derived(); // HAS NO IMPLEMENTATION
};
Base *b = new Derived();
delete b;
Run Code Online (Sandbox Code Playgroud)
注意:如评论中所述,上述示例未正确链接.这里提供的是解释我试图获得更多洞察力的情况,但是在链接过程中的实践中,这个例子将导致undefined reference to Derived错误.
如果您曾经调用~Derived()(例如删除b),则会出现链接错误,因为析构函数的符号不存在.由于~Base()是虚拟的,~Derived()因此在删除时仍会(尝试)调用b.缺乏实施与此无关.
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |