1. 程式人生 > >C++----new操作符建立類

C++----new操作符建立類

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;
}