C++编程经验(4):不要在构造函数和析构函数中使用虚函数

83 阅读2分钟

简单的说就是,在子类对象的基类子对象构造期间,调用的虚函数的版本是基类的而不是子类的。

对上面这种看上去有点违背直觉的行为可以用一个理由来解释:因为基类构造器是在派生类之前执行的,所以在基类构造器运行的时候派生类的数据成员还没有被初始化。如果在基类的构造过程中对虚函数的调用传递到了派生类, 派生类对象当然可以参照引用局部的数据成员,但是这些数据成员其时尚未被初始化。这将会导致无休止的未定义行为和彻夜的代码调试。沿类层次往下调用尚未初始化的对象的某些部分本来就是危险的,所以C++干脆不让你这样做。

#include

using namespace std;

class A

{

public:

A()

{

cout << "A构造函数";

Test();

}

~A()

{

cout << "A析构函数";

cout << "A::Test()" << endl;

}

virtual void Test()

{

cout << "A::Test()" << endl;

}

};

class B:public A

{

public:

B()

{

cout << "B构造函数";

Test();

}

~B()

{

cout << "B析构函数";

Test();

}

virtual void Test()

{

cout << "B::Test()" << endl;

}

};

int main()

{

A* pA = new B();

cout << "动态调用:";

pA->Test();

delete pA;

return 0;

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!

相关阅读docs.qq.com/doc/DSmxTbFJ1cmN1R2dB