当我在写一些关于基类/派生类类型变量的代码时,我遇到了这个有点奇怪的情况。它是这样的:
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "A Con" << endl; }
virtual ~A() { cout << "A Dec" << endl; }
};
class B : A {
public:
A a;
B(A _a) : a(_a) {
cout << "B Con" << endl;
}
virtual ~B() { cout << "B Dec" << endl; }
};
int main()
{
A a;
B b(a);
}
我在派生类(B)中声明了基类(A)类型成员变量,然后上面的代码给了我这个结果:
好的,那么第一个构造函数和最后一个构造函数是针对主函数中的a的,但是其他的呢?为什么析构函数被调用了5次而构造函数只被调用了3次?
我的猜测是:
A Con -> a in main()
A Con -> b in main() (base class constructor)
B Con -> b in main() (derived class constructor)
A Dec -> temporary value passed in B(A _a) : a(_a), copy constructor is called...
B Dec -> b in main() (derived class destructor)
A Dec -> member variable in B class (A a;)
A Dec -> b in main() (base class destuctor)
A Dec -> a in main()
我说的对不对?
1条答案
按热度按时间pjngdqdw1#
这一点:
调用
A
的复制构造函数,你还没有定义它,它不打印任何东西。当您使用它时,您可能还需要
A(A&&)
、A& operator=(A const&)
和A& operator=(A&&)
。