y3c-stl 0.3.3
Friendly C++ STL wrapper with automatic stacktrace
Loading...
Searching...
No Matches
shared_ptr< T > Class Template Reference

所有権を共有するスマートポインタ (std::shared_ptr) More...

#include <y3c/shared_ptr.h>

Public Types

using element_type = T
 

Public Member Functions

 shared_ptr (std::nullptr_t=nullptr) noexcept
 デフォルトコンストラクタ: nullptrを指す
 
 shared_ptr (const shared_ptr &other)
 コピーコンストラクタ: リソースを共有する
 
shared_ptroperator= (const shared_ptr &other)
 コピー代入: リソースを共有する
 
 shared_ptr (shared_ptr &&other)
 ムーブコンストラクタ: 所有権を移動する
 
shared_ptroperator= (shared_ptr &&other)
 ムーブ代入: 所有権を移動する
 
 ~shared_ptr ()=default
 
template<typename U >
 shared_ptr (const std::shared_ptr< U > &ptr)
 std::shared_ptrからのコピー
 
template<typename U >
shared_ptroperator= (const std::shared_ptr< U > &ptr)
 std::shared_ptrからのコピー
 
template<typename U >
 shared_ptr (std::shared_ptr< U > &&ptr)
 std::shared_ptrからの所有権の移動
 
template<typename U >
shared_ptroperator= (std::shared_ptr< U > &&ptr)
 std::shared_ptrからの所有権の移動
 
template<typename U >
 shared_ptr (const shared_ptr< U > &other)
 別の要素型のshared_ptrとリソースを共有する
 
template<typename U >
shared_ptroperator= (const shared_ptr< U > &other)
 別の要素型のshared_ptrとリソースを共有する
 
template<typename U >
 shared_ptr (shared_ptr< U > &&other)
 別の要素型のshared_ptrから所有権を移動
 
template<typename U >
shared_ptroperator= (shared_ptr< U > &&other)
 別の要素型のshared_ptrから所有権を移動
 
void reset () noexcept
 所有権を放棄
 
void swap (shared_ptr &other) noexcept
 所有権を入れ替える
 
ptr< element_typeget () const noexcept
 ポインタを取得
 
template<typename E = element_type, typename = internal::skip_trace_tag>
y3c::wrap_ref< E > operator* () const
 要素の間接参照
 
template<typename = internal::skip_trace_tag>
element_typeoperator-> () const
 メンバアクセス
 
long use_count () const noexcept
 所有権を共有しているshared_ptrの数を取得
 
 operator bool () const noexcept
 有効なリソースを所有しているかどうかを判定
 
bool owner_before (const shared_ptr &arg) const
 所有権ベースでのポインタ比較
 
 operator const std::shared_ptr & () const noexcept
 const std::shared_ptr へのキャスト
 
 operator wrap< const shared_ptr & > () const noexcept
 
wrap< const shared_ptr * > operator& () const
 

Friends

template<typename U >
class shared_ptr
 

Detailed Description

template<typename T>
class y3c::shared_ptr< T >

所有権を共有するスマートポインタ (std::shared_ptr)

  • キャストするか unwrap() することで std::shared_ptr<T> (のconst参照)に戻せる。
    • std::shared_ptr<T> のconstでない参照で取得して変更を加えることはできないようにしている。
  • 初期化は std::make_shared<T> または y3c::make_shared<T> で行う。 生ポインタ(newで初期化したものなど)を受け取ることはできない。
  • std::shared_ptr と相互変換できるが、 y3cが管理するオブジェクトの寿命の情報を std::shared_ptr は保持していないので、 y3c::shared_ptr を破棄し std::shared_ptr が残っている場合でも参照先のオブジェクトは破棄されたと判断されてしまう。
See also
shared_ptr - cpprefjp
Examples
shared_ptr-null.cc, shared_ptr-ref.cc, and shared_ptr-unwrap-ref.cc.

Member Typedef Documentation

◆ element_type

template<typename T >
using element_type = T

Constructor & Destructor Documentation

◆ shared_ptr() [1/7]

template<typename T >
shared_ptr ( std::nullptr_t  = nullptr)
inlinenoexcept

デフォルトコンストラクタ: nullptrを指す

◆ shared_ptr() [2/7]

template<typename T >
shared_ptr ( const shared_ptr< T > &  other)
inline

コピーコンストラクタ: リソースを共有する

◆ shared_ptr() [3/7]

template<typename T >
shared_ptr ( shared_ptr< T > &&  other)
inline

ムーブコンストラクタ: 所有権を移動する

◆ ~shared_ptr()

template<typename T >
~shared_ptr ( )
default

◆ shared_ptr() [4/7]

template<typename T >
template<typename U >
shared_ptr ( const std::shared_ptr< U > &  ptr)
inline

std::shared_ptrからのコピー

◆ shared_ptr() [5/7]

template<typename T >
template<typename U >
shared_ptr ( std::shared_ptr< U > &&  ptr)
inline

std::shared_ptrからの所有権の移動

◆ shared_ptr() [6/7]

template<typename T >
template<typename U >
shared_ptr ( const shared_ptr< U > &  other)
inline

別の要素型のshared_ptrとリソースを共有する

◆ shared_ptr() [7/7]

template<typename T >
template<typename U >
shared_ptr ( shared_ptr< U > &&  other)
inline

別の要素型のshared_ptrから所有権を移動

Member Function Documentation

◆ get()

template<typename T >
ptr< element_type > get ( ) const
inlinenoexcept

ポインタを取得

  • 返り値は wrap<element_type*> でラップされたポインタ。
    • 生ポインタを取得するにはさらに element_type* にキャストするか unwrap() が必要。

◆ operator bool()

template<typename T >
operator bool ( ) const
inlineexplicitnoexcept

有効なリソースを所有しているかどうかを判定

shared_ptr != nullptr と同じ。

◆ operator const std::shared_ptr &()

template<typename T >
operator const std::shared_ptr & ( ) const
inlinenoexcept

const std::shared_ptr へのキャスト

◆ operator wrap< const shared_ptr & >()

template<typename T >
operator wrap< const shared_ptr & > ( ) const
inlinenoexcept

◆ operator&()

template<typename T >
wrap< const shared_ptr * > operator& ( ) const
inline

◆ operator*()

template<typename T >
template<typename E = element_type, typename = internal::skip_trace_tag>
y3c::wrap_ref< E > operator* ( ) const
inline

要素の間接参照

  • 参照先が生きていない場合terminateする。
  • 返り値は wrap<element_type&> でラップされた状態で返る。
    • 元のelement_type型に戻すにはさらにキャストするか unwrap() が必要。
Examples
shared_ptr-null.cc.

◆ operator->()

template<typename T >
template<typename = internal::skip_trace_tag>
element_type * operator-> ( ) const
inline

メンバアクセス

  • 参照先が生きていない場合terminateする。
  • 返り値は元のelement_type型の参照で返るので、 メンバアクセスは通常のポインタと同様に行える。

◆ operator=() [1/6]

template<typename T >
shared_ptr & operator= ( const shared_ptr< T > &  other)
inline

コピー代入: リソースを共有する

◆ operator=() [2/6]

template<typename T >
template<typename U >
shared_ptr & operator= ( const shared_ptr< U > &  other)
inline

別の要素型のshared_ptrとリソースを共有する

◆ operator=() [3/6]

template<typename T >
template<typename U >
shared_ptr & operator= ( const std::shared_ptr< U > &  ptr)
inline

std::shared_ptrからのコピー

◆ operator=() [4/6]

template<typename T >
shared_ptr & operator= ( shared_ptr< T > &&  other)
inline

ムーブ代入: 所有権を移動する

◆ operator=() [5/6]

template<typename T >
template<typename U >
shared_ptr & operator= ( shared_ptr< U > &&  other)
inline

別の要素型のshared_ptrから所有権を移動

◆ operator=() [6/6]

template<typename T >
template<typename U >
shared_ptr & operator= ( std::shared_ptr< U > &&  ptr)
inline

std::shared_ptrからの所有権の移動

◆ owner_before()

template<typename T >
bool owner_before ( const shared_ptr< T > &  arg) const
inline

所有権ベースでのポインタ比較

◆ reset()

template<typename T >
void reset ( )
inlinenoexcept

所有権を放棄

  • nullptr を代入するのと同じ。
Examples
shared_ptr-ref.cc, and shared_ptr-unwrap-ref.cc.

◆ swap()

template<typename T >
void swap ( shared_ptr< T > &  other)
inlinenoexcept

所有権を入れ替える

◆ use_count()

template<typename T >
long use_count ( ) const
inlinenoexcept

所有権を共有しているshared_ptrの数を取得

  • std::shared_ptr の use_count を返す。 std::shared_ptr と y3c::shared_ptr で共有されている場合、 y3c側のオブジェクト寿命管理とは無関係。

Friends And Related Symbol Documentation

◆ shared_ptr

template<typename T >
template<typename U >
friend class shared_ptr
friend

The documentation for this class was generated from the following file: