メンバー関数の最後でデストラクタの呼び出しをバイパスするにはどうすればよいですか?

劉亦菲

自明ではないコピー不可能な(とにかく、コピー可能ですが非常に高価な)メンバーを持つ構造体があり、呼び出すとメンバーの所有権が転送されるメンバー関数があります。次のデモコードを参照してください。

class A{
    // ...
};
struct s{
    A instance;
    A? take(){ // originally named get(), as mentioned in comment, for clarity
        return instance?;
    }
}; // Even after s is destroyed, instance should keep on

言い換えれば、私はの寿命を延ばし、instanceそれを他の文脈で使用したいと思っています。return std::move(instance)オブジェクトを一時変数に明示的に解放するなど、いくつかの方法を試しましたが、どれも機能しませんでした。彼らは常にインスタンスのデストラクタを呼び出します。

では、どうすればそれを達成できますか?const参照を返すことは役に立ちますか?

ブライアン・ビー
  • オブジェクトの存続期間は、静的またはスレッドの保存期間がない限り、字句スコープを超えて延長することはできません
  • プログラムを呼び出すかクラッシュさせる以外に、スコープ外のオブジェクトに対する暗黙的なデストラクタ呼び出しを抑制することはできませんstd::exit

これはXY問題のように見えますほとんどの場合、実際の解決策は、(値による)take()戻りAを持ちstd::move、リソースをからs::instance戻り値に移動するために使用することです。そのため、のデストラクタs::instanceは何もしません。

A take() {
    return std::move(instance);
}

しかし、実際の問題を教えてくれないかどうかは定かではありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

別のクラスからメンバーへのポインタ関数を呼び出すにはどうすればよいですか?

分類Dev

C#でそのメンバー関数にアクセスしながら、1つのクラスのコンストラクターを呼び出さないようにするにはどうすればよいですか?

分類Dev

メンバー変数のデフォルト以外のコンストラクターを呼び出すにはどうすればよいですか?

分類Dev

関数ポインタを介してクラスメンバー関数を再帰的に呼び出すにはどうすればよいですか?

分類Dev

クラスのメンバーである関数を別の関数から呼び出すにはどうすればよいですか?

分類Dev

クラスのメンバー変数よりも早くコンストラクターを呼び出すにはどうすればよいですか?

分類Dev

デストラクタからconstメンバー関数を呼び出すにはどうすればよいですか?

分類Dev

std :: forwardを使用せずにメンバー変数のmoveコンストラクターを呼び出すにはどうすればよいですか?

分類Dev

Lua C API関数がクラスメンバーとして呼び出されたのか、それともテーブルから関数として呼び出されたのかを判断するにはどうすればよいですか?

分類Dev

Javaで、オーバーライドするクラスのインスタンスからオーバーライドされるクラスのメソッドを呼び出すにはどうすればよいですか?

分類Dev

パイプラインを使用してクラスを呼び出すように、forループを使用して複数の関数を呼び出すように変更するにはどうすればよいですか?

分類Dev

外部の呼び出し可能なメンバー関数を匿名オブジェクトに追加するにはどうすればよいですか?

分類Dev

Swiftの関数呼び出しスタックをデバッグするにはどうすればよいですか?

分類Dev

オブジェクトから呼び出されたバインドされたメンバー関数のコンテキストのタイプを示すにはどうすればよいですか?

分類Dev

メンバーがCuda / C ++のホストコードとデバイスコードの両方から呼び出されるクラスを適切に実装するにはどうすればよいですか?

分類Dev

関数を呼び出すjavascriptオブジェクト内でこのパラメーターを使用するにはどうすればよいですか?

分類Dev

複数のパラメーターを使用してHTTPPOSTリクエストを呼び出すにはどうすればよいですか?

分類Dev

jsコンストラクター関数を呼び出すにはどうすればよいですか?

分類Dev

Visual Studio Codeで、f2pyインターフェイスから共有ライブラリのc関数を呼び出すPythonプログラムをデバッグするにはどうすればよいですか。

分類Dev

要素のリストに取り外し可能なイベントリスナーを追加しながら、それが呼び出す関数にパラメーターを渡すにはどうすればよいですか?

分類Dev

コンストラクターのメンバー初期化子リストで2つの関数を呼び出すにはどうすればよいですか?

分類Dev

「nullのメンバー関数update()の呼び出し」エラーを修正するにはどうすればよいですか?

分類Dev

このコードを実行するたびにトレースバック(最後の最後の呼び出し)が表示されますが、これを修正するにはどうすればよいですか?

分類Dev

Jqueryで関数を複数回呼び出して、最後のリスナーをリッスンするだけでなく、イベントリスナーを追加するにはどうすればよいですか?

分類Dev

各クラスメソッド呼び出しの前後に関数を実行するにはどうすればよいですか?

分類Dev

Gmail本体(クライアント側)でハイパーリンクをヒットしたときにサーバー側スクリプト:Google App Scriptで関数を呼び出すにはどうすればよいですか?

分類Dev

パラメータリストに関数呼び出しを簡単に保持するにはどうすればよいですか?

分類Dev

クラスを前方宣言し、後でc ++でそのメンバー関数を使用するにはどうすればよいですか?

分類Dev

Firebaseの呼び出し可能なクラウド関数でカスタムエラーをスローするにはどうすればよいですか?

Related 関連記事

  1. 1

    別のクラスからメンバーへのポインタ関数を呼び出すにはどうすればよいですか?

  2. 2

    C#でそのメンバー関数にアクセスしながら、1つのクラスのコンストラクターを呼び出さないようにするにはどうすればよいですか?

  3. 3

    メンバー変数のデフォルト以外のコンストラクターを呼び出すにはどうすればよいですか?

  4. 4

    関数ポインタを介してクラスメンバー関数を再帰的に呼び出すにはどうすればよいですか?

  5. 5

    クラスのメンバーである関数を別の関数から呼び出すにはどうすればよいですか?

  6. 6

    クラスのメンバー変数よりも早くコンストラクターを呼び出すにはどうすればよいですか?

  7. 7

    デストラクタからconstメンバー関数を呼び出すにはどうすればよいですか?

  8. 8

    std :: forwardを使用せずにメンバー変数のmoveコンストラクターを呼び出すにはどうすればよいですか?

  9. 9

    Lua C API関数がクラスメンバーとして呼び出されたのか、それともテーブルから関数として呼び出されたのかを判断するにはどうすればよいですか?

  10. 10

    Javaで、オーバーライドするクラスのインスタンスからオーバーライドされるクラスのメソッドを呼び出すにはどうすればよいですか?

  11. 11

    パイプラインを使用してクラスを呼び出すように、forループを使用して複数の関数を呼び出すように変更するにはどうすればよいですか?

  12. 12

    外部の呼び出し可能なメンバー関数を匿名オブジェクトに追加するにはどうすればよいですか?

  13. 13

    Swiftの関数呼び出しスタックをデバッグするにはどうすればよいですか?

  14. 14

    オブジェクトから呼び出されたバインドされたメンバー関数のコンテキストのタイプを示すにはどうすればよいですか?

  15. 15

    メンバーがCuda / C ++のホストコードとデバイスコードの両方から呼び出されるクラスを適切に実装するにはどうすればよいですか?

  16. 16

    関数を呼び出すjavascriptオブジェクト内でこのパラメーターを使用するにはどうすればよいですか?

  17. 17

    複数のパラメーターを使用してHTTPPOSTリクエストを呼び出すにはどうすればよいですか?

  18. 18

    jsコンストラクター関数を呼び出すにはどうすればよいですか?

  19. 19

    Visual Studio Codeで、f2pyインターフェイスから共有ライブラリのc関数を呼び出すPythonプログラムをデバッグするにはどうすればよいですか。

  20. 20

    要素のリストに取り外し可能なイベントリスナーを追加しながら、それが呼び出す関数にパラメーターを渡すにはどうすればよいですか?

  21. 21

    コンストラクターのメンバー初期化子リストで2つの関数を呼び出すにはどうすればよいですか?

  22. 22

    「nullのメンバー関数update()の呼び出し」エラーを修正するにはどうすればよいですか?

  23. 23

    このコードを実行するたびにトレースバック(最後の最後の呼び出し)が表示されますが、これを修正するにはどうすればよいですか?

  24. 24

    Jqueryで関数を複数回呼び出して、最後のリスナーをリッスンするだけでなく、イベントリスナーを追加するにはどうすればよいですか?

  25. 25

    各クラスメソッド呼び出しの前後に関数を実行するにはどうすればよいですか?

  26. 26

    Gmail本体(クライアント側)でハイパーリンクをヒットしたときにサーバー側スクリプト:Google App Scriptで関数を呼び出すにはどうすればよいですか?

  27. 27

    パラメータリストに関数呼び出しを簡単に保持するにはどうすればよいですか?

  28. 28

    クラスを前方宣言し、後でc ++でそのメンバー関数を使用するにはどうすればよいですか?

  29. 29

    Firebaseの呼び出し可能なクラウド関数でカスタムエラーをスローするにはどうすればよいですか?

ホットタグ

アーカイブ