これで、new だった ~ からの return が失われたため、その new を削除する方法がないため、メモリ リークが発生していませんか?
はい、現在の実装にはほとんどメモリ リークがあります。または、少なくとも 1 つの可能性が高いです。
漏れがある場合、漏れないように設計するにはどうすればよいですか?
new をそのままにして、ローカル オブジェクトを取得し、値ごとに返さないのはなぜですか?
これが私が意味することです:
Foobar Foobar::operator~() {
Foobar result;
// compute *result based on *this
return result;
}
あなたの例でオブジェクトを動的に割り当てる理由はわかりません。
動的に割り当てられたオブジェクトが本当に必要な場合 (必要な理由がわかりません...)、スマート ポインターを使用することをお勧めします。
編集:
パフォーマンスが問題になる可能性があることを明確にしたので、(n)rvo と @VaughnCato/@Potatoswatter が既に言及したセマンティクスを移動することを指摘したいと思います (彼らの回答を読んでいただければ幸いです)。Want speed?のような記事を読むことをお勧めします。値渡し。 および移動コンストラクター。(n)rvo + move セマンティクスで考えるほど、値による戻りはパフォーマンスの問題ではない可能性があります。ムーブ セマンティクスとプロファイルを実装し、その後最適化を行って、それが本当に問題であるかどうかを確認することをお勧めします。
スマートポインタについて。http://en.cppreference.com/w/cpp/memory/shared_ptrとhttp://en.cppreference.com/w/cpp/memory/unique_ptrについて具体的に話していましたが、編集した回答であなたが言ったので完璧な解決策ではない可能性のあるポインターではなく、参照が必要です。あなたが調べたいかもしれない何か。
move/(n)rvo が望ましい結果をもたらさない場合のその他の可能性はかなり不潔であり、私の意見では、プロキシ オブジェクト/グローバル コンテナー (おそらくスマート ポインターと組み合わせたもの) などのようなエラーが発生しやすい方法です。しかし、私はまだこの種のものに慣れていないので、@VaughnCato/@Potatoswatter の回答にコメントしてください。私自身まだまだ初心者なので、ここまでご案内できればと思います。