目录
在内存里面是分好几个区的

1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信3. 堆用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段--存储全局数据和静态数据。5. 代码段--可执行的代码/只读常量
提到C++的内存管理方式,我们不得不先提到C语言的内存管理方式malloc/calloc/realloc/free
C语言:(malloc、free、calloc、realloc)函数讲解-CSDN博客
C++的内存管理方式:new/delete(操作符)
为什么有了malloc/calloc/realloc/free,还要new/delete呢?
我们来看看malloc/calloc/realloc/free和new/delete有什么区别
new和delete的使用方法

我们看如下代码
- #include<iostream>
- using namespace std;
- class A
- {
- public:
- A(int a = 0)
- : _a(a)
- {
- cout << "A():" << this << endl;
- }
- ~A()
- {
- cout << "~A():" << this << endl;
- }
- private:
- int _a;
- };
- int main()
- {
- // new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间
- //还会调用构造函数和析构函数
- A* p1 = (A*)malloc(sizeof(A));
- //A* p2 = new A(1);
- free(p1);
- //delete p2;
-
- // 内置类型是几乎是一样的
- int* p3 = (int*)malloc(sizeof(int));
- int* p4 = new int;
- free(p3);
- delete p4;
-
- A* p5 = (A*)malloc(sizeof(A) * 10);
- A* p6 = new A[10];
- free(p5);
- delete[] p6;
-
- return 0;
- }


1.我们可以看出在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会

1.new和delete解决了动态申请自定义类型初始化问题
2.相比于malloc/free简化了用法