私は構造体にコピー不可能な(コピー可能ではあるが非常に高価な)メンバを持っていて、呼び出した場合に必要なメンバ関数があり、メンバの所有権を移譲する。次のデモコードを参照してください:メンバ関数の最後でデストラクタへの呼び出しをバイパスする方法はありますか?
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参照ヘルプを返しますか?
「静的」にしますか?または、名前空間レベルで宣言します。 – Nawaz
'インスタンス 'は' s'のすべてのインスタンスに一意ですが、ちょっと厄介です。だから静的ではありません。 – YiFei
's'のインスタンスではない場合、誰が*このインスタンスを*所有する予定ですか?誰かがこれを*所有していなければなりません。あるいは、スコープ*にする必要があります。 – Nawaz