您的位置:首页 > 其它

模拟实现new、delete和new[] 、delete[]

2016-03-22 08:35 239 查看
模拟实现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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态内存开辟