new
在 C++中 new 在申请内存失败时默认会抛出一个 std::bad_alloc 异常。
所以,按照 C++标准,如果想检查 new 是否成功,则应该通过 try catch 捕捉异常。
但有些编译器不支持 try catch。
用户一般简单地使用”new(std::nothrow) 类型”。
new 在分配内存失败时会抛出异常, 而”new(std::nothrow)”在分配内存失败时会返回一个空指针
对已存在的指针,通过 new 调用类构造函数
#include <iostream>
#include <cstdlib>
class C{
public:
C(int _x):x(_x){}
int x;
};
int main(void)
{
C* ptr =(C*)malloc(sizeof(C));
(void)new(ptr) C(4);
cout<<ptr->x<<endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
定位 new 表达式 语法如下
new (place_address) type
new (place_address) type(initializers)
new (place_address) type [size]
new (place_address) type [size]{braced initializer list}
1
2
3
4
2
3
4
该用法不分配任何内存,它只是简单地返回指针实参,然后有 new 表达式负责在指定的地址初始化对象以完成整个工作。即定位 new 允许我们再一个特定的、预先分配的地址上构造对象。 用法示例
char buff[100];
int *p;
p = new(buff) int[20]; //p指向一个长度为20的int数组
char buff1[4];
int *p1=new(buff1)int
int *p2=new(buff1)int(0) //以上两种调用都可以
1
2
3
4
5
6
7
2
3
4
5
6
7
编辑 (opens new window)
上次更新: 2023/02/24, 10:34:03