【发布时间】:2019-07-08 13:53:50
【问题描述】:
这是我的代码。
当我删除第 11 行时,输出是
A(0)
B(0)
A(1)
关于最后一行“A(1)”,为什么要调用A类的第二个构造函数?
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "A(0)" << endl; }
A(const A& a) { cout << "A(1)" << endl; }
};
class B {
public:
B() : a() { cout << "B(0)" << endl; }
// B(const B& b) { cout << "B(1)" << endl; }
private:
A a;
};
int main() {
B object1;
B object2 = object1;
return 0;
}
A(0)
B(0)
A(1)
【问题讨论】:
-
你为什么感到惊讶?自动生成的
B的复制构造函数调用A的复制构造函数。当行处于活动状态时,B的复制构造函数会调用A的默认构造函数(因为A的任何构造函数都不会从B::B(const B&)显式调用)。 -
顺便说一句,你的复制构造函数应该是
B(const B& b) : a(b.a){ cout << "B(1)" << endl; }
标签: c++ class constructor copy-constructor default-copy-constructor