标签:
成员变量里面如果包含了引用类型,应该如何初始化此成员变量才不报错
答:需要利用类的初始化列表来构造该成员对象
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(析构函数处记得释放..),一种是上层传入(注意该对象的生命周期)..
注意..如果构造函数直接构造对象并把对象付给成员,构造函数结束时成员指向的对象也被栈回收了,后果很严重,传入引用对象的话请注意好该对象的生命周期
标签:
原文地址:http://www.cnblogs.com/JensenCat/p/5167809.html