一、new關鍵字和動態內存分配
在 C++ 中,我們可以使用 new 關鍵字進行動態內存分配。和靜態內存分配不同,動態內存分配的大小可以在程序運行時決定,而不是在編譯時就已經確定下來了。使用 new 分配內存可以幫助我們充分利用計算機的資源,因為在程序運行過程中,內存的需求是不斷變化的。例如,在需要實現一個動態數組或者只能在程序運行時才能確定大小的類時,使用 new 分配內存非常方便。
二、使用new創建數組
在 C++ 中,我們可以使用 new 操作符來創建數組。數組的創建方式非常類似於靜態數組,只不過需要使用 new 來動態創建數組,而不是在編譯時就已經分配好空間。下面是使用 new 創建數組的示例代碼:
int* p = new int[10];
這條語句會創建一個長度為 10 的動態數組,p 指向數組的第一個元素。需要注意的是,使用 new 關鍵字創建的數組,也需要使用 delete 關鍵字釋放內存,避免出現內存泄漏問題。
三、使用new創建數組並初始化
在使用 new 動態創建數組的時候,我們有兩種常用的初始化方式:
1. 在創建時,手動逐個對數組元素進行賦值。
例如:
int* p = new int[10]; for (int i = 0; i < 10; i++) { p[i] = i; }
這樣就可以創建一個長度為 10 的數組,且數組元素的值依次為 0 到 9。
2. 使用標準庫提供的 fill() 函數填充數組。
例如:
int* p = new int[10]; std::fill(p, p + 10, 0);
這樣就可以創建一個長度為 10 的數組,且數組元素的值都為 0。
我們還可以使用更加高級的初始化方式,例如使用大括弧 {} 對數組進行初始化。這種方式在 C++11 標準之後被引入。例如,我們可以使用下面的語句創建一個長度為 3 的數組,並將數組元素初始化為 1、2、3:
int* p = new int[3]{1, 2, 3};
需要注意的是,大括弧初始化只能在創建數組時使用,不能在賦值時使用。
四、釋放動態內存
在使用 new 創建動態數組時,我們需要手動釋放內存,否則就會出現內存泄漏的問題。釋放動態內存的方式是使用 delete 關鍵字,例如:
int* p = new int[10]; //操作數組 delete[] p; //釋放內存
需要注意,動態數組必須使用 delete[] 進行銷毀,而不能使用 delete。這是因為使用 new[] 創建數組時,編譯器會生成一個額外的整數,用於存儲數組的長度。如果使用 delete 銷毀動態數組,編譯器就無法正確析構數組,從而導致內存泄漏。
五、總結
本文介紹了 C++ 中使用 new 創建動態數組並初始化的方法。使用動態內存分配可以在程序運行時動態地分配和釋放內存,靈活性更高。在使用 new 創建動態數組時,我們需要注意內存泄漏的問題,並正確使用 delete[] 進行銷毀動態數組。
完整代碼示例:
#include <iostream> #include <algorithm> int main() { // 創建長度為 10 的動態數組 int* p = new int[10]; // 逐個元素賦值 for (int i = 0; i < 10; i++) { p[i] = i; } // 使用 fill() 函數填充數組 std::fill(p, p + 10, 0); // 使用大括弧對數組進行初始化 int* q = new int[3]{1, 2, 3}; // 輸出數組的值,驗證數組是否正確初始化 for (int i = 0; i < 10; i++) { std::cout << p[i] << " "; } std::cout << std::endl; for (int i = 0; i < 3; i++) { std::cout << q[i] << " "; } std::cout << std::endl; // 釋放內存 delete[] p; delete[] q; return 0; }
原創文章,作者:RQOAL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/325267.html