Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ Shared_ptrの紹介 | スマートポインタの導入
C++スマートポインタ

bookShared_ptrの紹介

メニューを表示するにはスワイプしてください

ユニークポインタと同様に、shared pointer(共有ポインタ)は動的に確保されたオブジェクトのアドレスを割り当てて保持するために使用されます。両者の主な違いは、shared pointerが設計上、共有可能である点です。安全に複数の所有者を持つことができます。実際、オブジェクトに複数の所有者が必要な場合にのみ使用すべきです。

Shared Pointerの仕組み

ユニークポインタとは異なり、shared pointerは参照カウントを保持します。shared pointerの参照カウントは、同じオブジェクトを現在参照(所有)しているshared pointerの数を追跡します。

shared pointerがスコープ外になるか、明示的にリセットされると、参照カウントは自動的にデクリメントされます。参照カウントが0になると、もはやどのshared pointerもそのオブジェクトを参照していないことを意味し、オブジェクトのメモリは自動的に解放されます。

shared_pointer.h

shared_pointer.h

copy
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 を呼び出す必要がありません。

question mark

shared pointer の参照カウントが増加するのはいつですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  7

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  7
some-alt