nlib
nn::nlib::UniquePtr< T, DEL > クラステンプレートfinal

UniquePtrはポインタの所有権を保持し、UniquePtrがスコープから出るときにデストラクタでポインタをDELで指定した方法により解放します。 [詳解]

#include "nn/nlib/UniquePtr.h"

nn::nlib::detail::UniquePtrBase< T, DEL, DEL_EMPTY >を継承しています。

公開型

typedef T * pointer_type
 T*typedefされています。
 
typedef DEL deleter_type
 DELtypedefされています。
 
typedef T element_type
 Ttypedefされています。
 

公開メンバ関数

void swap (UniquePtr &rhs) noexcept
 格納されているポインタをスワップします。 [詳解]
 
void reset (T *p=0) noexcept
 ポインタを置き換えます。置き換えられたポインタは削除されます。 [詳解]
 
T * get () const noexcept
 格納されているポインタを取得します。
 
T * release () noexcept
 ポインタの所有権を手放し、ポインタを返します。 [詳解]
 
size_t GetHash () const
 ポインタに対してハッシュ値の計算を行い、計算結果を返します。
 
DEL & get_deleter ()
 デリータを取得します。
 
const DEL & get_deleter () const
 デリータを取得します。
 
 operator bool () const
 有効なポインタを保持していればtrueを返します。
 
基本的なメンバ関数
constexpr UniquePtr () noexcept
 デフォルトコンストラクタです。
 
constexpr UniquePtr (nullptr_t) noexcept
 引数にnullptrを与えた場合に呼び出されます。
 
 UniquePtr (T *p) noexcept
 ポインタを設定します。 [詳解]
 
 UniquePtr (T *p, const DEL &del)
 ポインタとデリータを設定します。 [詳解]
 
 UniquePtr (UniquePtr &rhs, move_tag) noexcept
 ムーブによりオブジェクトを構築します。
 
UniquePtrassign (UniquePtr &rhs, move_tag) noexcept
 ムーブにより代入します。
 
 ~UniquePtr () noexcept
 デストラクタです。ポインタがNULLでなければデリータを実行して削除します。
 
AddRef< T >::type operator* () const
 ポインタの参照外しを行います。
 
T * operator-> () const noexcept
 ポインタを返します。
 
UniquePtroperator= (nullptr_t) noexcept
 nullptrを代入します。
 

詳解

template<class T, class DEL = DefaultDelete<T>>
class nn::nlib::UniquePtr< T, DEL >

UniquePtrはポインタの所有権を保持し、UniquePtrがスコープから出るときにデストラクタでポインタをDELで指定した方法により解放します。

テンプレート引数
Tオブジェクトの型
DELデリータの型。デフォルトではdelete/delete[]を実行します。
説明
以下のように記述してください。
UniquePtr<MyObject> myObjPtr(new MyObject());
UniquePtr<char[]> myArrayPtr(new char[1024]);
UniquePtr<void, void (*)(void*)> myMallocFreePtr(nlib_malloc(1024), nlib_free);
UniquePtr同士の比較関数としては、operator==()operator!=()が実装されています。 また、配列へのポインタが設定された場合、operator[]を利用することが可能です。
なお、C++11環境(テンプレートエイリアスが可能な環境)においてはstd::unique_ptrにテンプレートエイリアスされます。
内部実装メモ
現在の実装では、基底クラスのUniquePtrに派生クラスのUniquePtrを代入することはできません。
各種例:
exi/multithread/multithread.cpp, exi/script/script.cpp, exi/simple1/simple1.cpp, exi/simple2/simple2.cpp, exi/textparser/textparser.cpp, misc/threading/future/future.cpp, msgpack/json/json.cpp, msgpack/jsonrpc/jsonrpc.cpp, msgpack/jsonrpc/server.cpp, msgpack/msgpack1/msgpack1.cpp, msgpack/msgpack2/msgpack2.cpp, oss/binarypatch/binarypatch.cpp, succinct/ngc/ngc.cpp.

UniquePtr.h109 行目に定義があります。

構築子と解体子

◆ UniquePtr() [1/2]

template<class T, class DEL = DefaultDelete<T>>
nn::nlib::UniquePtr< T, DEL >::UniquePtr ( T *  p)
inlineexplicitnoexcept

ポインタを設定します。

引数
[in]pポインタ

UniquePtr.h119 行目に定義があります。

◆ UniquePtr() [2/2]

template<class T, class DEL = DefaultDelete<T>>
nn::nlib::UniquePtr< T, DEL >::UniquePtr ( T *  p,
const DEL &  del 
)
inline

ポインタとデリータを設定します。

引数
[in]pポインタ
[in]delデリータ

UniquePtr.h120 行目に定義があります。

関数詳解

◆ release()

template<class T, class DEL = DefaultDelete<T>>
nn::nlib::UniquePtr< T, DEL >::release ( )
inlinenoexcept

ポインタの所有権を手放し、ポインタを返します。

戻り値
ポインタ

UniquePtr.h154 行目に定義があります。

◆ reset()

template<class T, class DEL = DefaultDelete<T>>
nn::nlib::UniquePtr< T, DEL >::reset ( T *  p = 0)
inlinenoexcept

ポインタを置き換えます。置き換えられたポインタは削除されます。

引数
[in]pポインタ
説明
引数を省略すると pNULLが設定されます。
各種例:
succinct/ngc/ngc.cpp.

UniquePtr.h136 行目に定義があります。

◆ swap()

template<class T, class DEL = DefaultDelete<T>>
nn::nlib::UniquePtr< T, DEL >::swap ( UniquePtr< T, DEL > &  rhs)
inlinenoexcept

格納されているポインタをスワップします。

引数
[in,out]rhsスワップされるUniquePtrオブジェクト
非推奨:
この関数は将来のリリースにおいて削除されます。

UniquePtr.h127 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: