C++:构造函数和析构函数能否为虚函数?

简单回答是:构造函数不能为虚函数,而析构函数可以且常常是虚函数。

(1) 构造函数不能为虚函数

       编译器会为每个含有虚函数的类创建一个虚函数表,在创建对象时会创建一个虚函数表指针指向虚函数表。如果构造函数是虚函数,则需要用对象来调用构造函数,构造函数之前对象还不存在,因此构造函数不能为虚函数。

(2)析构函数可以是虚函数

      当基类对象的指针指向派生类对象,若析构函数不为虚函数,delete基类对象的时候,只会调用基类的析构函数,不会调用派生类的析构函数,这样会造成内存泄漏。(若果析构函数是虚函数,则会先调用派生类的析构函数然后在调用基类的析构函数。)

posted on 2019-01-17 11:08  Love63  阅读(327)  评论(0编辑  收藏  举报