2023年8月19日,周六早上
int a; 和 int *p = new int; 之間有以下區別:
1. 內存分配方式:int a; 是在棧上分配內存,而 int *p = new int; 是在堆上動態分配內存。
2. 生命周期:int a; 的生命周期與其所在的作用域相同,當超出作用域時,自動釋放分配的內存。而 int *p = new int; 分配的內存需要手動釋放,否則會導致內存泄漏。
3. 訪問方式:int a; 是直接訪問一個整數變量,而 int *p = new int; 是通過指針間接訪問一個整數變量。需要使用解引用操作符 * 來訪問指針所指向的值,例如 *p。
4. 初始化方式:int a; 會使用默認初始化,即將 a 的值設置為類型的默認值,例如 0。而 int *p = new int; 分配的內存不會自動初始化,默認情況下,指針 p 指向的值是未定義的,需要手動進行賦值。
5. 內存管理:對于 int a; 分配在棧上的內存,不需要手動釋放。而對于 int *p = new int; 分配在堆上的內存,需要使用 delete 操作符手動釋放內存,例如 delete p;。
需要注意的是,使用 new 運算符動態分配內存時,應該在不再需要這塊內存時手動釋放,以避免內存泄漏。