1.前言
1.1预备知识
- 对于进程地址空间有一定的了解
- 了解C语言的malloc/calloc/realloc/free的用法,功能
1.2目录
- new与delete
- operator new与operator delete函数(new/delete的底层实现)
- malloc/free与new/delete的区别
- operator new与operator delete的类专属重载
- 异常捕获
- 定位new
2.new与delete
C++较C语言新增了new
与delete
两个关键字
new
与delete
是C++用来帮助用户在堆上动态申请/释放内存
的操作符
(不是函数),可以为int,float
等内置类型变量申请/释放内存,也可以为类
这样的自定义类型变量申请/释放内存
我们来看一下new/delete的语法
- 动态 申请/释放 1个int(内置类型)的空间
int* ptr = new int;
delete(ptr);
- 动态 申请/释放 1个int(内置类型)的空间并初始化为10
int* ptr = new int(10);
delete(ptr);
- 动态 申请/释放 5个int(内置类型)的空间
int* ptr = new int[5];
delete[](ptr);
今有一类Date:
class Date{
public:
Date(int year = 0, int month = 1, int day = 1) {
_year = year;
_month = month;
_day = day;
cout << "Construct success" << endl;
}
~Date() {
_year = 0;
_month = 1;
_day = 1;
cout << "Destruct success" << endl;
}
private:
int _year;
int _month;
int _day;
};
- 动态 申请/释放 1个Date(自定义类型)的空间
Date* ptr = new Date;
delete(ptr);
- 动态 申请/释放 1个Date(自定义类型)的空间并初始化
Date* ptr