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