class with point member(带指针的类),一定有copy ctor(拷贝构造)和copy op=(拷贝赋值)

浅拷贝(讲这个概念是为了跟你解释为什么一定要写自己的版本):

如果你不写拷贝构造和拷贝赋值,系统会为你默认生成这两个函数。

而用系统里面默认生成的函数,则会发生下图中a和b的指针都指向“HELLO”,而“WORLD”没有指针指着它(这种情况叫内存泄漏)。

两个指针指向同一块内存也是危险的,因为你通过a改变字符串的时候,b所指的内容也会随之改变。如图:

c++ 浅拷贝和深拷贝

在编程里面。alias(别名)是一件危险的事情。

 

深拷贝如下图(拷贝构造的例子)

c++ 浅拷贝和深拷贝

上图是自己写的拷贝构造函数:调用该函数之后,系统先申请内存,然后把传入的参数拷贝到新申请的空间上,这就是深拷贝。

class with point member(带指针的类),一定有copy ctor(拷贝构造)和copy op=(拷贝赋值)

浅拷贝(讲这个概念是为了跟你解释为什么一定要写自己的版本):

如果你不写拷贝构造和拷贝赋值,系统会为你默认生成这两个函数。

而用系统里面默认生成的函数,则会发生下图中a和b的指针都指向“HELLO”,而“WORLD”没有指针指着它(这种情况叫内存泄漏)。

两个指针指向同一块内存也是危险的,因为你通过a改变字符串的时候,b所指的内容也会随之改变。如图:

c++ 浅拷贝和深拷贝

在编程里面。alias(别名)是一件危险的事情。

 

深拷贝如下图(拷贝构造的例子)

c++ 浅拷贝和深拷贝

上图是自己写的拷贝构造函数:调用该函数之后,系统先申请内存,然后把传入的参数拷贝到新申请的空间上,这就是深拷贝。

相关文章:

  • 2021-08-07
  • 2021-08-05
  • 2022-12-23
  • 2022-12-23
  • 2021-07-16
  • 2021-10-23
  • 2021-08-15
  • 2022-12-23
猜你喜欢
  • 2021-11-06
  • 2021-07-29
  • 2021-12-09
  • 2021-12-27
  • 2021-07-14
  • 2022-12-23
相关资源
相似解决方案