• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <memory>

    std::inout_ptr_t::デストラクタ

    ~inout_ptr_t();
    

    概要

    指定したSmart型スマートポインタが管理するリソースを解放し、レガシーC関数呼び出しにより取得されたポインタ値を格納する。

    スマートポインタのリソース解放には、Smart::release()メンバ関数が利用される。 スマートポインタへのポインタ値格納には、Smart::reset()メンバ関数、もしくはSmartオブジェクト構築+ムーブ代入operator=が利用される。

    効果

    説明用のSP型を下記の通り定義する :

    • Smart::pointerが有効な型名であればSmart::pointer
    • そうでなければ、Smart::element_type*が有効な型名であればSmart::element_type*
    • そうでなければ、pointer_traits<Smart>::element_type*
    • そうでなければ、Pointer

    説明用の文release-statementを下記の通り定義する :

    • コンストラクタs.release()を呼び出さない実装であれば、s.release()
    • そうでなければ、空文

    説明用メンバ変数s, a, pを用いて、以下と同じ効果を持つ :

    • is_pointer_v<Smart>trueならば、

      apply([&](auto&&... args) {
        s = Smart(static_cast<SP>(p), std::forward<Args>(args)...); }, std::move(a));
      

    • s.reset(static_cast<SP>(p), std::forward<Args>(args)...)適格ならば、

      if (p) {
        apply([&](auto&&... args) {
          release-statement;
          s.reset(static_cast<SP>(p), std::forward<Args>(args)...); }, std::move(a));
      }
      

    • is_constructible_v<Smart, SP, Args...>trueならば、

      if (p) {
        apply([&](auto&&... args) {
          release-statement;
          s = Smart(static_cast<SP>(p), std::forward<Args>(args)...); }, std::move(a));
      }
      

    • そうでなければ、プログラムは不適格となる。

    バージョン

    言語

    • C++23

    処理系

    関連項目

    参照