コンストラクタがnewを呼び出す(つまり、コンストラクタが別のものを動的に割り当てる必要がある)型を持つ+演算子をオーバーライドしようとしています。 。私の問題は、私は明らかに+関数内型Tのオブジェクトを作成する必要があるということですC++で動的に割り当てられた型のオーバーロード+演算子
T c = a + b;
:どこか、私は次のようなものを使用することができるようにしたいと思います。 by-copyを返すために+関数実装内のスタックにTの一時インスタンスを割り当てた場合、このインスタンスのデストラクタは+ call exitとして呼び出され、cへの代入の前に(つまり私は信じています)。それはオプションではありません。私の他のオプションは、new
を使用して、返すときにnewによって返されたポインタを逆参照するように思われます。しかし、このアプローチの問題は、ポインタがアクセス不能になり、その上にdelete
を呼び出す方法がないということです。
私の質問は...ダイナミックな割り当てを伴うタイプの演算子のオーバーロードがまれであるということはできません。どのように人々は一般的にこのような状況に対処しますか?
私はこの問題を理解していません。あなたの型 'T'がそのコンストラクタに' new'を、デストラクタで 'delete'を持っていれば、一部のメンバーにとって何が問題なのですか? –
私はT c = a + bと書いておきたいと思います。問題は、+関数がT型のオブジェクトを返す必要があるということです。このオブジェクトはどこで作成しますか? +関数のスタック上では機能しません - スコープから外れるときに削除されます。これは、必要な割り当ての直前に+関数から戻ったときです。新しいキーワードを使用して、戻ったときに逆参照する必要がありますか?しかし、私はnewによって返されたポインタを回復することはできませんでした。私はそれを削除することができず、メモリリークの原因となりました。 – Gravity
Hmmm ... copyコンストラクタはcopyで値を返すときに自動的に呼び出されますか?そのようなものは、私が仕事をしようとしているものを作るために必要であろう。 – Gravity