私はオーバーロードされた=可変演算子を持っています。 この変数はラムダで使用され、ポインタによって渡されます。 私は、この演算子を使用する場合、私はどうなる:逆参照せずにポインタ上の演算子を実行
*buf=CreateBuffer(w, h, type, c);
を、それはポインタを逆参照し、デストラクタは起こるべきではありません範囲の最後に呼び出されますが。
だからデストラクタの呼び出しを防ぐために、私が行います
buf->operator=(CreateBuffer(w, h, type, c));
は、この長いバージョンなし=演算子を達成するために、他の正常な規則はありますか?
'CreateBuffer'は' * buf'型の値を返しますか? 'CreateBuffer'の戻り値は、どちらの場合でも破棄する必要のある一時的なオブジェクトを作成するので、デストラクタが呼び出されるのを防ぐことはできません。私はあなたが持っている* root *の問題だと本当に疑っています。もしあなたがデストラクタを呼び出されたくない理由をもっと詳しく説明したら、私たちはあなたを助けることができますか?あなたが持っている*実際の問題は何ですか? [3,5、または0のルール](http://en.cppreference.com/w/cpp/language/rule_of_three)に従わないため、問題がありますか? –
'buf'が通常のポインタの場合、それらは全く同じです。 (どちらも '(* buf).operator =(CreateBuffer(w、h、type、c));')です。 – molbdnilo