黄山网站建设哪家强晋江wap站是什么意思
黄山网站建设哪家强,晋江wap站是什么意思,广州开展线上教学,郑州seo优化培训定义一个类对象时#xff0c;首先根据初始化列表初始化类的成员#xff08;就算没有显式定义初始化列表#xff0c;编译器也会默认地初始化一次#xff09;#xff0c;然后运行构造函数。因此#xff0c;类成员的构造函数必定先于类的构造函数运行。 class A
{
public:A(…定义一个类对象时首先根据初始化列表初始化类的成员就算没有显式定义初始化列表编译器也会默认地初始化一次然后运行构造函数。因此类成员的构造函数必定先于类的构造函数运行。 class A
{
public:A(){puts(In A);}~A(){puts(Out A);}
};class B
{
public:B(){puts(In B);}~B(){puts(Out B);}
};class D
{
public:D(){puts(In D);}~D(){puts(Out D);}
};class X
{
public:X(){puts(In X);}virtual ~X(){puts(Out X);}virtual void test(){puts(test in X);}D d;
};class C:public X
{
public:C()/*: b(), a()*/{puts(In C);}~C(){puts(Out C);}virtual void test(){puts(test in C);}
private:A a;B b;
};int main()
{X* p new C;p-test();delete p;return 0;
} new C的时候由于C由X继承而来因此先构造X。首先按照初始化列表初始化X的成员变量这里没有初始化列表系统也会默认地为d进行默认初始化此时调用D的构造函数打印In D。先初始化成员再运行构造函数 X的初始化阶段结束后运行X的构造函数打印In X。 X部分构造结束后开始构造C的部分。同样的先进行初始化工作无论有无初始化列表无论初始化列表的顺序如何成员的初始化顺序都按声明顺序进行初始化。打印In AIn B。 C的成员完成初始化后调用C的构造函数打印In C。 /*----------------------------------至此new C的过程完毕-----------------------------------------*/ 基类指针调用虚函数进行动态绑定输出test in C /*----------------------------------开始对指针p析构-----------------------------------------*/ 析构的顺序就是构造顺序的逆序。就是先析构父类再析构子类。先析构本类再析构本类的成员。 于是打印的顺序为O C, O B, O A, O X, O D 这个例子同时也解释了为什么基类的析构函数要声明为虚函数。如果 //不是虚函数 ~X(){puts(Out X);} 那么delete p时候会直接析构p的静态类型X所以C的成员以及C的析构函数将不会运行这样就会造成内存泄露。转载于:https://www.cnblogs.com/iyjhabc/p/3308921.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92122.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!