C++中定位new的使用方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hou09tian/article/details/81670181

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();

猜你喜欢

转载自blog.csdn.net/hou09tian/article/details/81670181
今日推荐