c++基礎(new)

Cplusplus-tutorial-in-hindi.jpg
new 這個關鍵字我們經常會用到無論是在 c++ 還是在像 java 或 c# 這樣的高階語言我們無時無刻都會用到 new,因為太熟悉了,所以也就不以為然,可能以為太熟悉太自然反而讓我們瞭解 new 的背後發生什麼並不多。c++ 是效率的代言人,所以我們要用 c++ 而沒有選擇易學易用的高階語言。我們的目的一定是追求程式的效能。所以我們在設計程式和開發過程中一定要記憶體上多花一些心事,要不還不如選擇 java 這樣高階語言來實現。
如果很好地操作記憶體和利用記憶體,理解 new 就顯得尤為重要。new 中表示在堆記憶體上分配記憶體給變數。使用 new 時候後面會跟基本型別或者 class。 new int
表示我們分配 4 位元組記憶體給變數。系統根據請求找到連續的 4 位元組記憶體,然後將記憶體地址返回給變數。
int a = 2; int *b = new int;
用 new
來分配記憶體後返回一個記憶體地址指標 b
。
int *b = new int[50]; // 200 bytes
class Pointer { private: String m_Name; public: Pointer() : m_Name("Unknown") {} Pointer(const String &name) : m_Name(name) {} const String &GetName() const { return m_Name; } };
想要給 Pointer 的例項分配記憶體可以使用 new Pointer()
,也可以寫成 new Pointer
。
Pointer *p = new Pointer();
Pointer *p = new Pointer;
想要定義 Pointer 陣列,就可以這樣來定義 Pointer *arr = new Pointer[50];
。
Pointer *p = new Pointer(); Pointer *arr = new Pointer[50];
使用 new 來給 class 分配記憶體其實做了兩件事—分配記憶體和呼叫建構函式
String m_Name; new Pointer[50];
同樣 malloc
方法可以分配並返回指標。
malloc(50);
既然 malloc
和 new
具有相同的功能,我們就可以用 malloc
來實現對記憶體的分配。
Pointer *p = new Pointer; Pointer *p2 = (Pointer *)malloc(sizeof(Pointer));
我們可以這樣改寫,但是 new
和 malloc
還是有區別的 malloc
只是分配記憶體並沒有像 new
那樣呼叫 Pointer
的建構函式。
我們無論使用 new
還是 malloc
分配記憶體給變數都需要手動來釋放記憶體,
new
需要使用 delete
,如果是陣列變數 delete[]
來顯式地釋放記憶體,隨後我們還會了解更多的策略來釋放記憶體。
int main(int argc, char const *argv[]) { int a = 2; int *b = new int[50]; // 200 bytes Pointer *p = new Pointer; Pointer *p2 = (Pointer *)malloc(sizeof(Pointer)); delete p; delete[] b; free(p2); std::cin.get(); }
也可以顯式地分配給記憶體 p 。
int *b = new int[50]; // 200 bytes Pointer *p = new(b) Pointer;