-
特点:
-
浅拷贝会拷贝指针的值,与被拷贝的指针指向同一块内存
-
深拷贝不会拷贝指针的值,但会创建一块新的内存,让指针指向
-
编译器的拷贝构造默认是浅拷贝,若一个类同时需要深拷贝与浅拷贝,需要重载拷贝构造函数,可以将其中的参数声明为引用类型,使其变为移动构造函数
-
-
浅拷贝:
-
优点:
-
拷贝效率高
-
-
缺点:
-
若浅拷贝了一个指针
ptr
,那么该ptr
所指的内存区域可能会被多次释放,拷贝对象和被拷贝对象都有可能在析构时释放ptr
,第二次释放时会引起undefined behavior
解决方法:
-
将该浅拷贝函数改为移动构造函数,但需确保被拷贝的对象不再使用
-
使用智能指针
shared_ptr
防止多次释放
-
-
若两个对象
a
与b
,将a
赋值给b
时,若b
原本的内存没有释放,就会造成内存泄漏,同时b
的内容也会失效,之后再次访问就可能会出错
-
-
-
深拷贝:
-
优点:安全,不用担心出错
-
缺点:拷贝效率低
-
-
关于深浅拷贝,通常能与值和引用相关,在
C++
新标准中也会与移动语义相关