Shared_ptrの紹介
メニューを表示するにはスワイプしてください
ユニークポインタと同様に、shared pointer(共有ポインタ)は動的に確保されたオブジェクトのアドレスを割り当てて保持するために使用されます。両者の主な違いは、shared pointerが設計上、共有可能である点です。安全に複数の所有者を持つことができます。実際、オブジェクトに複数の所有者が必要な場合にのみ使用すべきです。
Shared Pointerの仕組み
ユニークポインタとは異なり、shared pointerは参照カウントを保持します。shared pointerの参照カウントは、同じオブジェクトを現在参照(所有)しているshared pointerの数を追跡します。
shared pointerがスコープ外になるか、明示的にリセットされると、参照カウントは自動的にデクリメントされます。参照カウントが0になると、もはやどのshared pointerもそのオブジェクトを参照していないことを意味し、オブジェクトのメモリは自動的に解放されます。
shared_pointer.h
1234567891011121314151617181920212223242526272829303132333435363738394041#include <iostream> template <typename T> class SharedPointer { public: explicit SharedPointer(T* ptr = nullptr) : pointer(ptr), reference_count(new int(1)) {} SharedPointer(const SharedPointer& other) : pointer(other.pointer), reference_count(other.reference_count) { (*reference_count)++; } SharedPointer& operator=(const SharedPointer& other) { if (this != &other) { if (--(*reference_count) == 0) { delete pointer; delete reference_count; } pointer = other.pointer; reference_count = other.reference_count; (*reference_count)++; } return *this; } ~SharedPointer() { if (--(*reference_count) == 0) { delete pointer; delete reference_count; } } T* operator->() const { return pointer; } T& operator*() const { return *pointer; } private: T* pointer; int* reference_count; };
これは動的データの安全な共有所有権を確保するための確実な方法です。データを共有している場合でも、プログラムはメモリリークや破損のリスクが低くなり、手動で delete を呼び出す必要がありません。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 7
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 7