深拷贝~浅拷贝

时间:2022-11-24 19:54:17
问几个具体的问题,看看大家都怎么处理的

1. 我所有的类中,都没有用指针变量。都是最普通的int,double,顶多有一些vector,string之类的。有没有必要将拷贝构造函数弄成私有的从而避免“指针拷贝”?

2. 如果要自己写拷贝构造函数,我的一个类或者结构体里面有20多个变量,难道要一个一个重新拷贝值么?其中有5、6个vector对象,难道要遍历一遍vector把数值都挖出来,一个个push_back到新的vector里面?

3. class, struct,vector的拷贝构造函数的实现,到底是一个个复制值,还是可以用 memcpy之类的办法?也就是说,class, struct, vector等这一类常用的东西在内存中是不是连续的?

7 个解决方案

#1


1. 可以不用,最好写
2.传引用
3.传引用

#2


1.
我觉得可以不用自己写拷贝构造函数
默认的拷贝构造函数就可以了

vector 支持 = 赋值
string 也支持 = 赋值

#3


1.拷贝构造函数并不是一无是处啊,竟然没有指针,为啥不用。
2.要重新一个一个拷贝,拷贝vector用vector的拷贝构造函数。
3.vector,string在内存中是连续的

#4


1.可以 放心使用系统给你合成的拷贝构造函数
2.建议使用列表初始化,也可用=运算符……
3.vector指向的数据是连续的,但是memcpy不能用……

#5


如果都没用指针。。可以不写
默认的拷贝函数就是用memcpy

#6


引用 5 楼 stardust20 的回复:
如果都没用指针。。可以不写
默认的拷贝函数就是用memcpy

不好意思。。这边我说错了。。。默认的拷贝函数也不是用memcpy。。

#7


.

#1


1. 可以不用,最好写
2.传引用
3.传引用

#2


1.
我觉得可以不用自己写拷贝构造函数
默认的拷贝构造函数就可以了

vector 支持 = 赋值
string 也支持 = 赋值

#3


1.拷贝构造函数并不是一无是处啊,竟然没有指针,为啥不用。
2.要重新一个一个拷贝,拷贝vector用vector的拷贝构造函数。
3.vector,string在内存中是连续的

#4


1.可以 放心使用系统给你合成的拷贝构造函数
2.建议使用列表初始化,也可用=运算符……
3.vector指向的数据是连续的,但是memcpy不能用……

#5


如果都没用指针。。可以不写
默认的拷贝函数就是用memcpy

#6


引用 5 楼 stardust20 的回复:
如果都没用指针。。可以不写
默认的拷贝函数就是用memcpy

不好意思。。这边我说错了。。。默认的拷贝函数也不是用memcpy。。

#7


.