C++内存管理
2021-05-30 05:01
标签:缺省 pre 自定义 不能 realloc 通过 rgb 全局 malloc C语言中申请和释放空间(内置类型) malloc只负责申请空间, 不进行空间初始化 calloc负责申请空间, 并进行零时的初始化, 全部初始化为0 realloc调整生成的空间 C++中申请和释放空间(内置类型) 通过new和delete操作符进行动态内存管理 申请和释放空间(自定义类型) operator new 和 operator delete operator new和operator delete不是new和delete的重载函数 operator new 和 operator delete是全局函数 new定义表达式(了解) 在一定的空间上显示调用构造函数完成内容的初始化 C++内存管理 标签:缺省 pre 自定义 不能 realloc 通过 rgb 全局 malloc 原文地址:https://www.cnblogs.com/enjoyC/p/14754052.htmlvoid test(){
int* p1 = (int*)malloc(sizeof(int));
free(p1);
int* p2 = (int*)calloc(4, sizeof(int));
int* p3 = (int*)realloc(p2, sizeof(int)*10);
//realloc调整之后, 原来的空间修改为了新的空间,不需要释放原来的空间
free(p3);
}
void Test(){
//申请一个内存空间-->4byte
int* ptr1 = new int;
delete ptr1;
//申请一个内存空间,初始化为10-->4byte
int* ptr2 = new int(10);
delete ptr2;
//申请一个连续的内存空间,包含10个元素-->40byte,内存为随机值
int* ptr3 = new int[10];
//释放连续的空间
delete[] ptr3;
}
class A{
public:
//默认构造
A(){
cout "A()" endl;
}
//带参构造
A(int a)
:_a(a)
{}
A(int a, int b, int c)
:_a(a)
{}
//析构函数
~A(){
cout "~A()" endl;
}
private:
int _a = 10;
};
void test(){
//自定义类型: malloc: 申请空间(不进行初始化,不调用构造函数)
A* mpa = (A*)malloc(sizeof(A));
//自定义类型: free: 释放空间(不清理资源,不调用析构函数)
free(mpa);
//自定义类型: new: 申请空间 + 调用构造函数进行空间内容的初始化
A* ptr = new A;
//自定义类型: delete: 先调用析构函数进行空间资源的清理 + 空间释放
delete ptr;
// 自定义类型: 连续空间(不能使用带出构造)
//new[]: 申请空间 + 调用N次构造函数
A* arr = new A[100];
//delete[]: 调用N次析构函数 + 释放空间
delete[] arr;
/*调用默认构造函数(无参或全缺省)*/
A* p1 = new A;
delete p1;
/*如果有初始化,要调用带参构造函数*/
A* p2 = new A(10);
A* p3 = new A(1,2,3);
delete p2;
delete p3;
}
void test(){
//使用方式类似于malloc/free
//operator new: malloc + 异常, malloc如果申请失败会给一个指针空值, 并不会异常
int* ptr = (int*)operator new(sizeof(int));
int* ptr2 = (int*)malloc(sizeof(int));
//operator delete: 封装free
operator delete(ptr);
free(ptr2);
}
class A{
public:
A(int a)
:_a(a)
{
cout " A(int) " endl;
}
~A(){
cout "~A()" endl;
}
private:
int _a;
};
void test(){
A* pa = (A*)malloc(sizeof(A));
//初始化已有的空间
//new定位表达式: new(指针)类型(参数列表(可选))-->显示调用构造函数
new(pa)A(10);
pa->~A();
free(pa);
}