C++中operator new[]的用法
时间: 2023-09-12 09:03:16 浏览: 165
`operator new[]` 是 C++ 中用于动态分配数组的运算符。它的语法如下:
```
void* operator new[](std::size_t size);
void* operator new[](std::size_t size, std::align_val_t alignment);
```
第一个函数会分配 `size` 字节大小的连续内存空间,返回一个指向该内存空间的指针。如果分配失败,会抛出 `std::bad_alloc` 异常。
第二个函数除了分配 `size` 字节大小的内存空间外,还会保证该内存空间的对齐方式满足 `alignment` 参数所指定的要求。如果无法满足对齐要求,则会抛出 `std::bad_alloc` 异常。
`operator new[]` 会在内存空间中构造对象,但不会调用对象的构造函数。如果需要在内存空间中构造对象,需要调用 `placement new` 运算符。
例如,以下代码演示了如何使用 `operator new[]` 分配一个 `int` 类型的数组:
```c++
int* p = new int[10];
```
注意,使用 `operator new[]` 分配的内存空间必须使用 `operator delete[]` 进行释放,否则会导致内存泄漏。例如:
```c++
delete[] p;
```
此外,如果需要自定义 `operator new[]` 和 `operator delete[]`,可以参考以下示例:
```c++
void* operator new[](std::size_t size) {
// 在堆上分配内存空间
void* ptr = std::malloc(size);
if (ptr == nullptr) {
// 分配失败,抛出异常
throw std::bad_alloc();
}
return ptr;
}
void operator delete[](void* ptr) noexcept {
// 释放内存空间
std::free(ptr);
}
```
阅读全文