模拟实现new。delete
void Test1()
{
//1、分配空间 2.显示调用构造函数
AA* p1 = (AA*)malloc(sizeof(AA));
new(p1)AA; //NEW(P1+I)AA(参数列表);
//3、析构函数 4、释放空间
p1->~AA();
free(p1);
}
模拟实现new[]。delete[]
void Test2()
{
//1、分配空间 2.显示调用构造函数
AA* p1 = (AA*)malloc(sizeof(AA) * 10 + 4);
*((int*)p1) = 10;
p1 = (AA*)((int*)p1 + 1);
//3、析构函数 4、释放空间
for (int i = 0; i < 10; ++i)
{
new(p1 + i)AA;
}
int n = *((int*)p1 - 1);
for (int i = 0; i < n; ++i)
{
p1[i].~AA();
//(p1 + 1)->~AA(); //也可以
}
free((int*)p1 - 1);
}