码迷,mamicode.com
首页 > 编程语言 > 详细

拷贝构造函数(c++常问问题一)

时间:2016-01-29 00:26:02      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

*什么是拷贝构造函数又可以叫复制构造函数(浅拷贝与深拷贝)

下面的代码演示了什么是拷贝构造函数,如果不人为定义拷贝构造函数,系统将默认给你分配一个浅拷贝的拷贝构造函数

class cat
{
public:
	//构造函数
	cat():m_pMyName(NULL),m_unAge(0)
	{
		cout<<"cat defult ctor"<<endl;
	}
	
	//拷贝构造函数(复制构造函数)
	cat(const cat& other)
	{
		this->m_unAge = other.m_unAge;

		//把自己的空间释放先
		if (0 != this->m_pMyName)
		{
			delete this->m_pMyName;
			this->m_pMyName = NULL;
		}

		//如果目标有名字
		if (other.m_pMyName)
		{
			//动态分配一个名字长度+1的堆..此处为深拷贝
			int len = strlen(other.m_pMyName);
			m_pMyName = new char[len + 1];
			memset(m_pMyName , 0 , len+1);
			memcpy(m_pMyName , other.m_pMyName , len+1);
		}

		/*
		//如果目标有名字
		if (other.m_pMyName)
		{
			//动态分配一个名字长度+1的堆..此处为浅拷贝..只复制了指针,没复制指针指向的对象
			m_pMyName = other.m_pMyName;
		}
		*/
  	}
  unsigned int m_unAge;
  char* m_pMyName;
  }

//实战应用...
void main()
{
    cat A;
    cat B(A);//构造对象B,使用拷贝构造函数构造
    cat C = A; //注意这里的对象初始化要调用拷贝构造函数,而非赋值
}

 

拷贝构造函数(c++常问问题一)

标签:

原文地址:http://www.cnblogs.com/JensenCat/p/5167785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!