C++ 智慧指標機制是一種自動管理指向堆疊記憶體的指標的機制,可防止記憶體洩漏和懸空指標。主要包括 unique_ptr(唯一所有權)、shared_ptr(共享所有權)和 weak_ptr(弱引用)。它提供自動釋放記憶體、檢查指標有效性等功能,簡化記憶體管理,提高程式碼安全性。
C++ 智慧指標機制
#簡介
##C++ 智慧指標是一種自動管理指向堆記憶體的指標的機制,可簡化記憶體管理並防止記憶體洩漏和懸空指標等問題。智慧型指標封裝了裸指標(raw pointer),並提供了額外的功能,例如自動釋放記憶體和檢查指標的有效性。關鍵概念
實作
#include <memory> // 使用 unique_ptr std::unique_ptr<int> uptr = std::make_unique<int>(10); *uptr = 20; // 使用 shared_ptr std::shared_ptr<std::vector<int>> sptr = std::make_shared<std::vector<int>>(); sptr->push_back(1); sptr->push_back(2); // 使用 weak_ptr std::weak_ptr<int> wptr(uptr); if (auto sptr2 = wptr.lock()) { *sptr2 = 30; }
實戰案例
##範例1:防止記憶體洩漏下面的程式碼使用原始指標來管理動態分配的記憶體。如果不小心手動釋放內存,就會發生內存洩漏。
int* ptr = new int(10); // ... delete ptr; // 必须记住释放内存
使用智慧指標可以防止這種問題:
std::unique_ptr<int> uptr = std::make_unique<int>(10); // ... // uptr 会自动在析构时释放内存範例2:共享所有權
考慮以下情況,兩個函數都使用同一個動態分配的字串。原始指標不允許共享所有權,這可能導致程式錯誤:
char* strPtr = new char[100]; void func1() { // 使用 strPtr } void func2() { // 也使用 strPtr }
使用shared_ptr 可以解決此問題:
std::shared_ptr<char[]> strPtr = std::make_shared<char[]>(100); void func1() { // 使用 strPtr } void func2() { // 也使用 strPtr }優勢
以上是揭秘C++智慧指標機制,高效率管理內存的詳細內容。更多資訊請關注PHP中文網其他相關文章!