了解不同意义的new和delete
这里所说的new是new operator,operator new 以及placement new。
首先我们明确new操作符需要完成两个工作,一个是调用operator new分配一定的内存空间,调用对象的构造函数。如果我们我们打算自己给对象分配内存,那么我们定义自己的operator new,在调用new操作符,那么new操作符会调用我们的operator new来构建对象。同时operator new也可以用来分配内存,返回的是void *型的原始内存。placement new的主要用途是在已经分配的内存上构建我们的对象。
例如
widget * constructWidgetInBuffer(void *buffer,int widgetSize)
{
return new (buffer) Widget(widgetSize);
}
以下是例子:
void *mallocShared(size_t size);针对利用new来申请数组的情况:
void freeShared(void * memory);
void *sharedMemor=mallocShared(size_t size);
Widget *pw=constructWidgetINbuffer(sharedMemory,10);
pw->~Widget();
freeShared(pw);
1.new 会调用operator new[]来分配内存,然后再一个一个的调用构造函数就行构造。
2.delete []会析构每一个对象,再释放相应的内存。