copy构造与copy复制

“copy构造”与“copy复制”误区:----“=”语法也可以用来调用copy构造函数:

如:Constr object3 = object1;

区别在于:如果定义一个新的对象(如Constr object3),一定会有个构造函数被调用,不可能调用复制操作。

     如果没有新对象被定义(如object1 = object2;),不会有构造函数被调用,你们当然是“copy复制”操作被调用!

示例代码:

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

class Constr
{
public:
Constr()
{
cout << "Constr()" << endl;
}

Constr(const Constr& con)
{
cout << "Constr(const Constr& con)" << endl;
}

Constr& operator = (const Constr& con)
{
cout << "Constr& operator = (const Constr& con)" << endl;
return *this;
}

};

int main()
{
Constr object1;
Constr object2(object1);
object1 = object2;
Constr object3 = object1;
return 0;
}

时间: 2024-10-07 18:14:26

copy构造与copy复制的相关文章

c++笔记:const、初始化、copy构造/析构/赋值函数

构造函数 Default构造函数:可被调用而不带任何实参的构造函数,没有参数或每个参数都有缺省值.如: class A { public: A(); }; 将构造函数声明为explicit,可阻止它们被用来执行隐式类型转换,但仍可用来进行显示类型转换.如: class B { public: explicit B(int x = 0, bool b = ture); }; copy构造函数:用于以同型对象初始化自我对象,以passed by value的方式传递对象:· copy assignm

copy&amp;mutableCopy 浅拷贝(shallow copy)深拷贝 (deep copy)

本文来自 这里,原文作者微博MicroCai 概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对象内存到另一块内存中. 一图以蔽之 再简单些说:浅复制就是指针拷贝:深复制就是内容拷贝. 集合的浅复制 (shallow copy) 集合的浅复制有非常多种方法.当你进行浅复制时,会向原始的集合发送retain消息,引用计数加1,同时指针被拷贝到新的集合. 现在让我们看一些浅复制的例子: NSArray *shallowCop

猫猫整理问题之:copy,对象自定义copy

猫猫分享,必须精品 原文地址:http://blog.csdn.net/u013357243?viewmode=contents copy copy的正目的 copy 目的:建立一个副本,彼此修改,各不干扰 Copy(不可变)和MutableCopy(可变)针对Foundation框架的数据类型. 对于自定义类,copy就是可变的. 可变数组的copy 这里用NSMutableArray为例子. // 可变=>可变&不可变,内存地址都会变化 void copyDemo1() { NSMuta

Shallow copy and Deep copy

一.来自wikipidia的解释: Shallow copy One method of copying an object is the shallow copy. In that case a new object B is created, and the fields values of A are copied over to B. This is also known as a field-by-field copy,field-for-field copy, or field co

理解一下python中的浅copy和深copy

最近在学习过程中,了解了一下,浅copy和深copy,做个记录. 所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝. 首先,对赋值操作我们要有以下认识: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 ). 修改不可变对象(str.tuple)需要开辟新的空间 修改可变对象(list等)不需要开辟新的空间 浅拷贝仅仅复制了容器中元素的地址 >>> user = ['tom', ['age', 20]] >>> user_new = us

python中的shallow copy 与 deep copy

今天在写代码的时候遇到一个奇葩的问题,问题描述如下: 代码中声明了一个list,将list作为参数传入了function1()中,在function1()中对list进行了del()即删除了一个元素. 而function2()也把list作为参数传入使用,在调用完function1()之后再调用function2()就出现了问题,list中的值已经被改变了,就出现了bug. 直接上代码: list = [0, 1, 2, 3, 4, 5] def function1(list): del lis

python中的深copy和浅copy

bytes Python bytes/str bytes 在Python3中作为一种单独的数据类型,不能拼接,不能拼接,不能拼接 >>> '€20'.encode('utf-8') b'\xe2\x82\xac20' >>> b'\xe2\x82\xac20'.decode('utf-8') '€20' 解码 >>> b'\xa420'.decode('windows-1255') '?20' 深copy和浅copy 深copy新建一个对象重新分配内存

C++类禁止copy构造函数和copy assign操作符

C++类禁止copy构造函数和copy assign操作符 在C++类中,编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数.注意,这些编译器产生出来的函数都是public的,为了阻止这些函数被创建出来,我们可以把它们声明为private,这样就阻止了编译器暗自创建其对应版本函数. class Node { public: Node(int _data = 0) : data(_data) {} int get() cons

浅copy与深copy

浅copy 实现浅copy的几种方式: 1 import copy 2 3 name1=['Liyunlong',['alex','Tony'],'Xuliucheng'] 4 5 name2=copy.copy(name1) 6 name2=name1[:] 7 name2=name1.copy() 实现深copy的方式: 1 import copy 2 3 name1=['Liyunlong',['alex','Tony'],'Xuliucheng'] 4 5 name2=copy.deep