/*
new和delete的基本使用,是c++的操作符
结论:
new不但可以分配内存,还可以初始化对象
malloc不会调用类的构造函数
free不会调用类的析构函数
*/
#if 1
class Test
{
public:
Test(int _a)
{
a = _a;
cout << "构造函数执行" << endl;
}
~Test()
{
cout << "析构函数执行" << endl;
}
protected:
private:
int a;
};
void test()
{
int *p = new int;
*p = 20;
printf("*p = %d\n", *p);
delete p;
int *p1 = new int(21);//定义并初始化
printf("*p1 = %d\n", *p1);
delete p1;
int *pArray = new int[10];
pArray[0] = 10;
delete[]pArray;
char *str = new char[25];
strcpy(str, "12345");
printf("str = %s\n", str);
delete[]str;
cout << "1-使用malloc创建对象,free释放对象" << endl<<endl;
//对象的操作
Test *pT1 = (Test *)malloc(sizeof(Test));
free(pT1);
cout << "2-使用new创建对象,delete释放对象" << endl<< endl;
Test *pT2 = new Test(10); //new能执行类型构造函数
delete(pT2); //delete操作符 能执行类的析构函数
printf("---------------------------\n");
//深入分析
//malloc 用delete释放
cout << "3-使用malloc创建对象,delete释放对象" << endl << endl;
Test *pT3 = (Test *)malloc(sizeof(Test));
delete(pT3);
//new 用free释放
cout << "4-使用new创建对象,free释放对象" << endl << endl;
Test *pT4 = new Test(10); //new能执行类型构造函数
free(pT4); //delete操作符 能执行类的析构函数
}
#endif
