当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。
1)包含<new>或<new.h>
2)placement new是用来实现定位构造的
#include "stdafx.h"
#include<stdlib.h>
#include<new.h>
class A
{
public:
~A()
{
printf("fffe");
}
};
template<class T>
void F()
{
T *p = new T[10];
T *a = new(p) T;
}
int _tmain(int argc, _TCHAR* argv[])
{
F<A>();
char p[100];
A *a = new (p)A;
delete a;
return 0;
}
当我们觉得默认的new operator对内存的管理不能满足我们的需要,而希望自己手工的管理内存时,placement new就有用了。STL中的allocator就使用了这种方式,借助placement new来实现更灵活有效的内存管理。