C++ スマート ポインタ メカニズムは、メモリ リークやダングリング ポインタを防ぐためにヒープ メモリへのポインタを自動的に管理するメカニズムです。主に unique_ptr (一意の所有権)、shared_ptr (共有所有権)、weak_ptr (弱い参照) が含まれます。メモリの自動解放やポインタの有効性チェックなどの機能を提供し、メモリ管理を簡素化し、コードのセキュリティを向上させます。
C++ スマート ポインタ メカニズム
はじめに
C++ スマート ポインタは、ヒープ メモリへのポインタを自動的に管理するメカニズムで、メモリ管理を簡素化し、メモリ リークやダングリング ポインタなどの問題を防ぎます。スマート ポインタは生のポインタをカプセル化し、メモリの自動解放やポインタの有効性のチェックなどの追加機能を提供します。
主要な概念
実装
#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 中国語 Web サイトの他の関連記事を参照してください。