栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

拷贝赋值函数、拷贝构造函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

拷贝赋值函数、拷贝构造函数

拷贝构造函数

也是构造函数的一种,常用来以另一对象为模板创建新对象。如果对象中没有指针,可以直接使用数据库自带的该函数,但有指针就需要自己构建,这是为了避免造成浅拷贝,使两个指针指向同一内存空间。

例如

string s1;

string s2(s1);

拷贝赋值函数

作用和拷贝构造函数基本一致,区别在于拷贝构造的对象是新创建的,而赋值函数则是原来就有的。

在代码表示上也有所不同

拷贝构造如下:

inline string::string( const string& str)

{

m_data=new char[strlen(str.m_data+1)];

strcpy(m_data;str.m_data);

}

而拷贝赋值则多了监测是否为自我赋值、删除已有堆空间等操作。

代码如下:

inline string&string ::operator =(const string &str)

{

if(this==&str)

     return this;

delete[] m_data;

m_data=new char[strlen(str.m_data+1)];

 

strcpy(m_data;str.m_data);

return this;

}

深浅拷贝差别是什么?

浅拷贝:如果复制的对象中引用了一个外部内容(例如分配在堆上的数据),那么在复制这个对象的时候,让新旧两个对象指向同一个外部内容,就是浅拷贝。(指针虽然复制了,但所指向的空间内容并没有复制,而是由两个对象共用,两个对象不独立,删除空间存在)

深拷贝:如果在复制这个对象的时候为新对象制作了外部对象的独立复制,就是深拷贝。

两种拷贝区别是什么?

1)拷贝构造函数是一个对象初始化一块内存区域,这块内存就是新对象的内存区,而赋值函数是对于一个已经被初始化的对象来进行赋值操作。
2)一般来说在数据成员包含指针对象的时候,需要考虑两种不同的处理需求:一种是复制指针对象,另一种是引用指针对象。拷贝构造函数大多数情况下是复制,而赋值函数是引用对象

3)实现不一样。拷贝构造函数首先是一个构造函数,它调用时候是通过参数的对象初始化产生一个对象。赋值函数则是把一个新的对象赋值给一个原有的对象,所以如果原来的对象中有内存分配要先把内存释放掉,而且还要检察一下两个对象是不是同一个对象,如果是,不做任何操作,直接返回。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号