new关键字
在C++中, new 关键字用于动态分配内存。它是C++中处理动态内存分配的主要工具之一,允许在程序运行时根据需要分配内存。
基本用法
分配单个对象:使用 new 可以在堆上动态分配一个对象。
例如, new int 会分配一个 int 类型的空间,并返回一个指向该空间的指针。
int* ptr = new int; //C语言中,int *p = (int *)malloc(sizeof(int));
分配对象数组: new 也可以用来分配一个对象数组。
例如, new int[10] 会分配一个包含10个整数的数组。
int* arr = new int[10]; //C语言中,int *arr = (int *)malloc(sizeof(int)*10);
初始化:可以在 new 表达式中使用初始化。对于单个对象,可以使用构造函数的参数:
MyClass* obj = new MyClass(arg1, arg2);
delete关键字
在堆上申请空间,使用 new 分配的内存必须显式地通过delete (对于单个对象)或 delete[ ] (对于数组) 避免内存泄露:
释放单个对象:
delete ptr; // 释放 ptr 指向的对象
释放数组:
delete[] arr; // 释放 arr 指向的数组
注意事项:
异常安全:如果 new 分配内存失败,它会抛出std::bad_alloc异常
内存泄露:忘记使用了 new 分配的内存会导致内存泄露。
匹配使用 delete 和 delete[ ] ::为避免未定义行为, 分配的单个对象应该使用delete,,使用 new[] 分配的数组应该使用 delete[ ]释放
示例:
class MyClass {
public:
MyClass() {
std::cout << "Object created" << std::endl;
}
};
int main() {
// 分配单个对象
MyClass* myObject = new MyClass();
// 分配对象数组
int* myArray = new int[5]{1, 2, 3, 4, 5};
// 使用对象和数组...
// 释放内存
delete myObject;
delete[] myArray;
}
return 0;
}
在这个例子中, new 被用来分配一个 delete[] 来释放内存。每个 MyClass 类型的对象和一个整数数组,然后使用 new 都对应一个 delete 和 delete ,保证了动态分配的内存被适当管理。