欢迎来到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类型的空间并初始化为10
int* 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)); // C
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;
}