C++----new操作符建立類
阿新 • • 發佈:2018-12-14
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; }