重温堆和拷贝构造函数

简介: 堆: C++程序的内存格局通常分为四个区: 1.全局数据区(data area) 2.代码区(code area) 3.栈区(stack area) 4.堆区(即自由存储区)(heap area) 全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数所分配的局部变量、函数参数、返回数据、返回地址等存放在栈区,余下的空间都被作为堆区。
堆:
C++程序的内存格局通常分为四个区:
1.全局数据区(data area)
2.代码区(code area)
3.栈区(stack area)
4.堆区(即自由存储区)(heap area)

全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数所分配的局部变量、函数参数、返回数据、返回地址等存放在栈区,余下的空间都被作为堆区。
C++的new\delete机制比malloc()/free()更加方便。运算符new分配堆内存,如果成功,则返回只向该内存的空间,如果失败,则返回NULL。所以每次使用运算符new动态分配内存时,都应测试new的返回指针值,以防分配失败。
从堆上分配对象数组,只能调用默认的构造函数,不能调用其他任何构造函数。

使用堆空间往往由于:
1.直到运行时才能直到需要多少对象空间;
2.不知道对象的生存期到底有多长;
3.直到运行时才知道一个对象需要多少内存空间。

拷贝构造函数:
当一个对象创建时,分配了资源,这时,就需要定义自己的拷贝构造函数,使之不但拷贝成员,也拷贝资源。也就是说,如果你的类需要析构函数来析构资源,则它也需要一个拷贝构造函数。这种情况下,对对象进行的是深拷贝。
默认拷贝构造函数对对象进行的是浅拷贝。

目录
相关文章
|
存储 安全 编译器
【C++初阶(三)引用与内联函数】
【C++初阶(三)引用与内联函数】
59 0
|
5月前
|
存储 编译器 C++
C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)
C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)
53 0
|
5月前
|
C语言 C++
C++初阶学习第三弹——类与对象(上)——初始类与对象
C++初阶学习第三弹——类与对象(上)——初始类与对象
24 0
|
6月前
|
C++
C++什么是深浅拷贝,深浅拷贝的区别?
C++什么是深浅拷贝,深浅拷贝的区别?
|
6月前
|
存储 程序员 C语言
C语言栈和堆的区别
C语言栈和堆的区别
|
存储 C语言
[数据结构 -- C语言] 堆(Heap),你小子就是堆,看我如何透彻的将你拿捏
[数据结构 -- C语言] 堆(Heap),你小子就是堆,看我如何透彻的将你拿捏
[数据结构 -- C语言] 堆(Heap),你小子就是堆,看我如何透彻的将你拿捏
|
人工智能 JavaScript 前端开发
为什么要用深浅拷贝、什么是深浅拷贝、以及如何实现
首先我们要明白一点,js中数据类型分为: 基本数据类型 (Number, String, Boolean, Null, Undefined, Symbol) 对象数据类型 ( Object )** 引用数据类型的值是保存在栈内存和堆内存中的对象。栈区内存保存变量标识符和指向堆内存中该对象的指针。当寻找引用值时,解释器会先寻找栈中的地址。然后根据地址找到堆内存的实体
113 0
为什么要用深浅拷贝、什么是深浅拷贝、以及如何实现
|
存储 算法 编译器
【C++技能树】类的六个成员函数Ⅰ --构造、析构、拷贝构造函数
在开始本章内容之前,先浅浅的了解一下this指针的概念.这对理解后面的内容有着很大的帮助.
97 0
|
存储 Linux 编译器
C++初阶之内存分布(上)
C语言还提供了一个函数叫 calloc , calloc 函数也用来动态内存分配。
|
C++ Windows
C++初阶之内存分布(下)
如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回NULL。