class Person
{
public:
Person()
{
cout << "默认构造函数调用" << endl;
}
Person(int i)
{
cout << "有参构造函数调用" << endl;
}
~Person()
{
cout << "析构函数调用" << endl;
}
};
void test01()
{
//Person p1; //栈区开辟,会被释放掉
Person * p2 = new Person; //不会被释放掉;在堆区开辟,不会被释放;
//所有new出来的对象,都会返回该类型的指针;
//malloc 返回 void* 还要强转;
//malloc会调用构造吗? 不会 但是new会调用构造函数;
//new 是运算符 ; malloc 是函数
//释放对去空间:
//delete 配合 new 使用;malloc 配合 free 使用;
delete p2;
}
void test03()
{
//通过new来开辟数组:
Person * pArry = new Person[10];
//开辟了10个Person对象;
//通过new开辟内存的时候,一定会调用构造数组;
//释放内存:
//释放new出来的数组对象;
delete[]pArry;
}
//当构造函数为有参构造函数时:
//test03的这种开辟方式一定要提供无参构造函数。因为当类中有有参构造函数时,默认的无参构造函数不再有用;
//堆区开辟空间的注意事项。
//在栈上开辟空间时:
void test04()
{
//在栈上开辟数组可以指定有参构造;
//在堆区必须有无参(默认构造函数)
Person Arry[2] = { Person(1), Person(2)};
//栈上开辟的数组,会自动释放,无需管释放;
}
int main()
{
test01();
test03();
test04();
return 0;
}