读书人

定位new表达式有关问题

发布时间: 2012-03-03 15:33:03 作者: rapoo

定位new表达式问题
我在一教材中看到new的用法是这样的:
new (place_address) type -specifier;
其中,place_address是一指针,但我搞不清 type -specifier指的是什么。请懂行的同学帮我解释一下。我是这样理解的:唯一特定类型。如:int *p=new int[10];
int *pt=new(p)int;
但是我在一些资料上看到有这样的例子:
int *p=new int[10];
int *pt=new(p)int[5];
我实在是一头雾水,请大家帮帮忙!!!!
谢谢!!!

[解决办法]
new (place_address) type -specifier
在指定内存place_address处构造type -specifier对象.

class One
{
//......
};

int arr[100];//假设arr的空间足以容纳One的对象.
One* p= new(arr) One;//可以在这里构造一个One的对象.

void * pv=malloc(sizeof(One));
One* p= new(pv) One;//也可这样构造一个One的对象.

也就是定位new只负责构造对象,不负责分配内存.

[解决办法]
int *p=new int[10];
int *pt=new(p)int[5];

第一个是说申请了一块内存,大小是int[10],指针p指向它的首地址

第二个是说在上面申请好的那10个int里面,占用它的前5个,并用指针pt指向它的首地址。

其实很明显了,pt和p指向的是一个地方。

p和pt分别对应的内存是有5个重复的。

pt在p开辟的10个int内存里取了前5个,来进行它自己的操作

读书人网 >C++

热点推荐