025 、new和delete的基本使用,是c++的操作符

/*
	new和delete的基本使用,是c++的操作符
	
	结论:
		new不但可以分配内存,还可以初始化对象
		malloc不会调用类的构造函数
		free不会调用类的析构函数
	注意:
		如果用一个指针变量pt先后指向不同的动态对象,应注意指针变量
		的当前指向,以免删错了对象。在执行delete运算符时,在释放内存
		空间之前,自动调用析构函数,完成有关善后清理工作。
*/
#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

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章