成员变量里面如果包含了引用类型,应该如何初始化此成员变量才不报错
答:需要利用类的初始化列表来构造该成员对象
class dog1 { public: dog1(){m_strName = "peter";}; string m_strName; }; class cat1 { public: //这里用了两种方法来初始引用类型的成员变量,一种是new,一种是上层传入 //注意..如果构造函数直接构造对象并把对象付给成员,构造函数结束时成员指向的对象也被栈回收了,后果很严重,传入引用对象的话请注意好该对象的生命周期 cat1(int& nCnt):m_friend(*(new dog1())),m_nfriendCnt(nCnt) { //... } dog1& m_friend; int &m_nfriendCnt; }; void main() { int nCnt = 1; cat1 c1(nCnt); cout<<c1.m_friend.m_strName.c_str();//成功输出"peter" cout<<c1.m_nfriendCnt;//成功输出1 system("pause"); }
这里用了两种方法初始引用类型的成员变量,一种是new(析构函数处记得释放..),一种是上层传入(注意该对象的生命周期)..
注意..如果构造函数直接构造对象并把对象付给成员,构造函数结束时成员指向的对象也被栈回收了,后果很严重,传入引用对象的话请注意好该对象的生命周期
时间: 2024-10-18 12:23:09