C++构造与析构


构造函数中调用虚函数

调用的是基类中的函数不是调用派生类的,因为派生类还未构造完成。保持构造函数精简,可以把一些操作抽出来放在成员函数中,一般不要在构造函数中调用虚函数。


调用基类构造函数,需要放在初始化列表中,放在派生类函数体里就会调用两次基类的构造函数,第一次是编译器插入的调用基类的无参构造函数。



构造函数与析构函数调用顺序相反,大概是因为,派生类可能使用基类的数据



虚析构函数,当使用基类指针析构派生类对象时,保证调用正确的析构函数



下面给出一段测试代码:

1 class A{ 2  public: 3     A(){ 4         printf("构造 A\n"); 5         f(); 6     } 7     virtual void f(){ 8         printf("A.f()\n"); 9     }10     virtual ~A(){11         printf("析构 A\n");12     }13 };14 15  class B: public A{16  public:17     B(): A(){18         printf("构造 B\n");19         f();20     }21       virtual void f(){22         printf("B.f()\n");23     }24     virtual ~B(){25         printf("析构 B\n");26     }27 };28 29  int main(){30     A *p = new B();31     p->f();32     delete p;33     return 0;34 }

运行结果:

[lym@localhost tmp]$ ./a.out构造 AA.f()构造 BB.f()B.f()析构 B析构 A

上面所说的几点,应该都可以看出来。

另外:

定义变量时,对于单参构造函数

Foo apple = 8; 与 Foo apple(8); 是等价的。
原文链接: https://www.cnblogs.com/liyongmou/archive/2011/04/22/2024629.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/24386

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午2:15
下一篇 2023年2月8日 上午2:15

相关推荐