成员变量包含引用类型(c++常问问题七)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了成员变量包含引用类型(c++常问问题七)相关的知识,希望对你有一定的参考价值。

成员变量里面如果包含了引用类型,应该如何初始化此成员变量才不报错

答:需要利用类的初始化列表来构造该成员对象

 

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(析构函数处记得释放..),一种是上层传入(注意该对象的生命周期)..
注意..如果构造函数直接构造对象并把对象付给成员,构造函数结束时成员指向的对象也被栈回收了,后果很严重,传入引用对象的话请注意好该对象的生命周期

 

以上是关于成员变量包含引用类型(c++常问问题七)的主要内容,如果未能解决你的问题,请参考以下文章

C++ const 修饰符

c++中const总结

友元(c++常问问题十三)

C++常成员变量

C++常成员变量

C++常成员函数