1.首先明确当类中含有引用类型的成员变量时,编译器会将所有合成的默认构造函数都定义为delete
,也就是说编译器将不会合成任何构造函数,所有构造函数必须由用户显式地定义,且该引用变量必须在所有定义的构造函数初始化列表中直接初始化,而不能在构造函数中初始化,形参也必须是引用类型。
2.分析以下代码,注释部分(编译环境g++5.1.0):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <iostream> #include <string>
using namespace std; class A { public: A(int i=3) : m_i(i){} void print() { cout << "m_i=" << m_i << endl; } private: int m_i; }; class B { public:
B(A& a) : m_a(a) {} void display() { m_a.print(); } private: A& m_a; }; int main(void) { A a(5); B b(a); b.display(); B b2(a);
return 0; }
|
3.用处:例如当有两个类要对第三个类的数据进行共享处理时,可以考虑将第三个类作为这两个类的引用类型的成员变量。