C++继承与多态
继承按照继承的父类的声明顺序调用父类的构造函数,然后按照内部类的声明顺序调用内部类的构造函数,最后调用本地类的构造函数
如果父类也有继承,在初始化父类时也要按照这个顺序来初始化,是递归的
如果是virtual继承,被virtual的类只有一份,不会每个子类生成一份
析构的时候按照构造的相反顺序调用析构函数
如果成员函数是多态函数,根据指针实际指向的对象调用对象自己的多态函数,如果不是,调用指针对应的类的函数,找不到就调用父类的
A a;
B b = a; 调用的是拷贝构造,因为此时b不存在
//-----------------------------
A a;
B b;
b = a; 调用的是赋值构造,因为此时b已存在
delete (A*)nullptr; 无效果,不会崩溃,也不调用析构
拷贝构造函数可以浅拷贝,但是释放的指针成员的时候就会出现多次释放的情况
如果不想多次释放就需要将被拷贝的对象的指针成员赋空,
但是这样需要将被拷贝的对象对应的参数的const属性cast掉,还让原来的对象不能找到指针指向的内容了
既不方便也不合理
而移动构造操作的都是临时对象,指针成员可以赋空,因为以后肯定不用它了,找不到没事
所以移动构造都会使用浅拷贝,并且将临时对象指针成员赋空,防止多次释放