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

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

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值