c++ 浅拷贝和深拷贝

简介: class with point member(带指针的类),一定有copy ctor(拷贝构造)和copy op=(拷贝赋值)浅拷贝(讲这个概念是为了跟你解释为什么一定要写自己的版本):如果你不写拷贝构造和拷贝赋值,系统会为你默认生成这两个函数。

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

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

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

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

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

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

 

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

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

相关文章
|
7月前
|
编译器 C++ Python
【C/C++ 泡沫精选面试题02】深拷贝和浅拷贝之间的区别?
【C/C++ 泡沫精选面试题02】深拷贝和浅拷贝之间的区别?
113 1
|
存储 Cloud Native Linux
C++ 深拷贝浅拷贝
C++ 深拷贝浅拷贝
|
6月前
|
存储 编译器 C++
C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)
C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)
55 0
|
6月前
|
算法 编译器 Linux
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
51 0
|
C++
22 C++ - 深拷贝和浅拷贝
22 C++ - 深拷贝和浅拷贝
47 0
|
编译器 C++
C++:基于浅拷贝/深拷贝对模拟string类的一些优化
C++:基于浅拷贝/深拷贝对模拟string类的一些优化
|
编译器 C++
C++中的深拷贝和浅拷贝介绍
对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: class Base{ public: Base(): m_a(0), m_b(0){ } Base(int a, int b): m_a(a), m_b(b){ } private: int m_a; int m_b; }; int main(){ int a = 10; int b = a; //拷贝 Base obj1(10, 20);
126 0
C++学习笔记_06 深拷贝和浅拷贝 2021-04-19
C++学习笔记_06 深拷贝和浅拷贝 2021-04-19
|
15天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
26 2
|
21天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
55 5