一、普通new的使用
new是C++中一個關鍵字,用於在運行時動態地分配內存,使用new運算符可以將對象的指針存儲在變數中。通過new創建的對象存儲在堆內存中,其生命周期不依賴於代碼塊,需要開發者手動刪除才能釋放內存。
下面是一個使用new來分配和釋放內存的示例代碼:
#include <iostream> int main() { int* ptr = new int(5); //分配一個整型變數的內存空間,並將其初始化為5,返回其指針 std::cout << *ptr << std::endl; //輸出該指針指向的內存空間的值(即5) delete ptr; //釋放該指針指向的內存空間 return 0; }
在這個示例中,使用new動態分配了一個整型變數的內存空間,並將其指針存儲在ptr變數中。通過使用指針訪問這個新分配的內存空間,可以修改或讀取其中的數據。最後使用delete釋放了內存。
二、使用new創建動態數組
new同樣也可以用於創建動態數組。創建數組時需要在類型後面添加方括弧[],並在方括弧內指定數組的大小。下面是一個使用new創建動態數組的示例代碼:
#include <iostream> int main() { int* ptr = new int[5]; //分配一個包含5個整型變數的內存空間,返回其首地址 for(int i = 0; i < 5; i++) { ptr[i] = i; //將數組中的元素初始化為其下標值 } for(int i = 0; i < 5; i++) { std::cout << ptr[i] << " "; //依次輸出數組中的元素 } std::cout << std::endl; delete[] ptr; //釋放該數組佔據的內存空間 return 0; }
在這個示例中,使用new動態創建了一個包含5個整型變數的數組,為數組中的每個元素賦值,並依次輸出它們的值。最後使用delete[]關鍵字釋放了數組佔據的內存空間。
三、使用new創建自定義類型
new同樣適用於創建自定義類型的對象。需要注意的是,由於C++類可以擁有自己的構造函數和析構函數,因此創建自定義類型的對象時需要調用正確的構造函數。下面是一個使用new創建自定義類型對象並釋放內存的示例代碼:
#include <iostream> class Person { public: Person(std::string n, int a) : name(n), age(a) { //構造函數 std::cout << "create a person" << std::endl; } ~Person() { //析構函數 std::cout << "delete a person" << std::endl; } std::string name; int age; }; int main() { Person* ptr = new Person("Alice", 18); //創建一個Person對象,並傳入構造函數參數,返回其指針 std::cout << "name: " << ptr->name << ", age: " << ptr->age << std::endl; delete ptr; //釋放該Person對象佔據的內存空間 return 0; }
在這個示例中,使用new動態創建了一個Person對象,並通過調用Person類的構造函數進行初始化。然後通過使用指針訪問對象的成員變數並輸出它們的值,最後使用delete釋放了內存。
四、使用new創建對象數組
同樣地,new也可以創建對象數組。需要調用對象的默認構造函數來創建對象數組。下面是一個使用new創建對象數組並釋放內存的示例代碼:
#include <iostream> class Person { public: Person() { //構造函數 std::cout << "create a person" << std::endl; } ~Person() { //析構函數 std::cout << "delete a person" << std::endl; } }; int main() { Person* ptr = new Person[5]; //創建長度為5的Person對象數組,並返回其首地址 delete[] ptr; //釋放該對象數組佔據的內存空間 return 0; }
在這個示例中,使用new動態創建了一個長度為5的Person對象數組,並通過調用Person類的構造函數來初始化數組中的每個元素。最後使用delete[]釋放了該對象數組佔據的內存空間。
五、使用new時要注意的問題
雖然new可以被用來創建動態對象和數組,但是使用new時也有一些需要注意的問題。
首先,使用new創建的對象不會被自動釋放。開發者需要手動使用delete或者delete[]來釋放內存空間。如果開發者忘記釋放內存,那麼這些內存空間將一直存在於系統中,佔據著寶貴的內存資源,造成內存泄漏。
其次,使用new時需要考慮分配的內存空間是否滿足要求,如是否為NULL等。如果分配內存空間失敗,會拋出std::bad_alloc異常。為避免這種情況,開發者可以通過判斷返回指針是否為NULL來確保內存分配成功。
總之,new是C++中動態內存分配的主要方式之一,開發者需要了解其用法,合理使用該關鍵字,以避免不必要的內存泄漏或者程序崩潰。
原創文章,作者:SWHGM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/332361.html