欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析2
目录
- 👉🏻c++内存管理方式
- new/delete 操作内置类型
- new和delete操作自定义类型
👉🏻c++内存管理方式
new/delete 操作内置类型
new和delete是C++中用于动态分配和释放内存的运算符。
new运算符用于在堆上动态分配内存,并返回指向分配内存的指针。它的语法如下:
指针类型指针变量 = new 数据类型;
例如,下面的代码动态分配了一个整数的内存,并将其地址赋给指针变量:
int* ptr = new int;
delete运算符用于释放通过new运算符分配的内存。它的语法如下:
delete 指针变量;
例如,下面的代码释放了之前动态分配的整数内存:
delete ptr;
需要注意的是,使用new分配的内存必须使用delete释放,否则会导致内存泄漏。另外,使用delete释放内存后,指针变量将成为悬空指针,应该将其设置为nullptr以避免悬空指针的问题。
🌷new/delete 操作内置类型
void Test()
{// 动态申请一个int类型的空间int* ptr4 = new int;// 动态申请一个int类型的空间并初始化为10int* ptr5 = new int(10);// 动态申请10个int类型的空间int* ptr6 = new int[3];delete ptr4;delete ptr5;delete[] ptr6;int* ptr7 = new int[3]{1,2,3};//初始化, 如果什么都不给,初始化为0
}
对于内置类型,不给初始值,编译器初始化是随机值
new和delete操作自定义类型
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)); // Cint* 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;
}