内存的划分
进程虚拟物理空间
代码段的代码不是我们编写的代码,是转化成二进制的代码
常量区:存储常量,不能被修改的。也存储代码
new/delete
1、new一个int对象
int* p1 = new int;
2、new是个int对象
int* p2 = new int[10];
new一个对象,初始化成10
int* p3 = new int(10);
3、new多个对象并初始化(C++11才支持)
int* p4 = new[10]{10,10,10,10};
前面给值的初始化,没给的默认初始化为0
4、delete
不匹配,可能会崩溃
对于内置类型,malloc和new除了用法不同,没有什么区别
对于自定义类型:malloc之开空间;new除了开空间还会去调用自定义类型的构造函数
C的写法
C++的写法,new不仅开空间,还去调用自定义类型的构造函数
当写链表时,节点会经常使用next、_val,类就比较喜欢用struct定义,因为struct默认是公有,不用访问限定符
new delete具体干了什么
C语言
C++
malloc失败返回空指针;new失败是抛异常
operator new和operator delete函数
operator new、operator delete是两个库函数,不是运算符重载
1、operator new:封装了malloc,当malloc失败的时候抛异常
2、operator delete:封装的free
(1)operator new和malloc没有本质的区别,operator new就是对malloc进行了封装,当malloc失败时抛异常
(2)operator delete与free也没有本质的区别
(3)operator new 和 operator delete没有什么特殊的意义,只是在new、delete的底层上
new的底层就是开辟空间、调用构造函数。(开辟空间这如果用malloc,那么失败还是返回空指针,为了不返回空指针,写了一个库函数operator new 当失败的时候抛异常)
定位new
内存泄漏
内存泄漏是指针丢了