Skip to content

在 C++ 引入了物件之後許多操作邏輯有所變化,其中一個很重要的就是 pointer 的使用變得更加智能且方便。

Smart Pointers

在新版的 pointer 中有很多新的內容,從比較接近 C 的 new/delete 到現代 C++ 的智能指針。

new / delete

在物件導向的設計中常常出現需要客製化初始化與刪除的時候,但使用原本的 malloc 與 free 並不會自動幫忙處理這些部分,而 C++ 支援的 new 與 delete 可以在宣告記憶體外直接初始化這段記憶體的數值,讓使用與管理更加簡單輕鬆。

c
// new a int pointer
int *ptr = new int{1};
cout << (int)*ptr << endl;
delete ptr;

// new a int array with value
int *ptr = new int[3]{1,2,3};
cout << ptr[0] << endl;
delete[] ptr;

與 malloc 系列相同,new 一樣會有出問題的時候,但相比回傳一個 null,new 使用 C++ 的錯誤處理 throw std::bad_alloc

智慧指標