函数关系速记
底层实现上:malloc = operator new
free = operator delete(operator new为new底层)
定位new:replacement new = 构造函数
new = malloc + replacement new delete = 析构函数 + free
new & delete 操作符
new:new 类型 [对象个数] (初始化)
delete:delete [] 指针
void Test()
{
// 动态申请一个int类型的空间
int* ptr4 = new int;
// 动态申请一个int类型的空间并初始化为10
int* ptr5 = new int(10);
// 动态申请3个int类型的空间
int* ptr6 = new int[3];
delete ptr4;
delete ptr5;
delete[] ptr6;
}

replacement new
注意:构造函数一般不能被直接调用(析构函数才可以)
new(指针)构造函数(参数)
new(p2)A(10); //将p2位置的A对象初始化为10
// 定位放置new/replacement new
int main()
{
// p1现在指向的只不过是与A对象相同大小的一段空间,构造函数没有执行,不算独立对象
A* p1 = (A*)malloc(sizeof(A));
new(p1)A; // 注意:如果A类的构造函数有参数时,此处需要传参
p1->~A();
free(p1);
A* p2 = (A*)operator new(sizeof(A));
new(p2)A(10);
//将p2位置的A对象初始化为10
p2->~A();
operator delete(p2);
return 0;
}
1078

被折叠的 条评论
为什么被折叠?



