plain new,nothrow new和placement new
时间: 2024-01-27 19:17:10 浏览: 155
c++中new的三种用法详细解析
在C++中,new操作符有三种不同的用法:plain new、nothrow new和placement new。
1. plain new:使用new操作符分配内存时,如果内存分配失败,将抛出std::bad_alloc异常。例如:
```
int* ptr = new int[10];
```
如果内存分配失败,则会抛出std::bad_alloc异常。
2. nothrow new:使用nothrow new操作符分配内存时,如果内存分配失败,将返回一个空指针,而不是抛出异常。例如:
```
int* ptr = new (std::nothrow) int[10];
```
如果内存分配失败,则会返回一个空指针。
3. placement new:placement new允许程序员在指定的内存地址上构造对象。例如:
```
char buffer[sizeof(std::string)];
std::string* ptr = new (buffer) std::string("placement new");
```
这里将在buffer指向的内存地址上构造一个std::string对象。
需要注意的是,使用placement new时,必须手动调用对象的析构函数来释放内存。例如:
```
ptr->~string();
```
这里将调用std::string对象的析构函数,释放内存。
阅读全文