C++中的new关键字可以在内存中动态的分配空间。自定义MyClass类
class MyClass
{
public:
MyClass()
{
cout << "Construction MyClass." << this << endl;
}
~MyClass()
{
imember = 0;
cout << "Destruction MyClass." << this << endl;
}
int imember;
};
之后,通过new关键字动态分配内存
MyClass* fPtr1 = new MyClass();
此时,变量fPtr1中保存了动态分配内存的起始地址。但是该起始地址是编译器在内存中随机分配的。
通过定位new可以实现在指定位置上的内存分配。
1 格式
定位new的格式为
new(args) T
其中,args是一个对象的指针,即指定的起始地址;T是分配内存的类型;返回值也是指定的起始地址。
2 使用
char x[sizeof(MyClass)];
MyClass* fPtr2 = new(&x[0])MyClass;
以上代码的作用是在数组x的起始位置处分配内存。此时,x和fPtr2的值如图1所示。
图1 x和fPtr2的值
从图1可以看出,通过定位new分配的内存就是在数组x的起始地址上。
3 释放内存
由于定位new分配的内存并不是“新分配”的,而是原先就有的。所以不能使用delete来释放该内存,而是要通过析构函数来释放资源。
fPtr2->~MyClass();