通常のルールは、あなたが参照を取ることができるなら、あなたがすることです。しかし、あなたの例ではf3の場合、ポインタを削除するという事実は、関数がポインタを取った場合、誰も関数が参照を削除することを期待しないので、はるかに単純であることを示唆しています。
f2は、NULL以外の値を渡しますので、参照は良い考えです。おそらく、それ以上の情報なしでconst-correctであると考えられます。つまり、f2はObjを非constメソッドを呼び出すことによって修正します。
デザインがf1、f2、f3などの名前の良いものかどうかは分かりません。時々、名前はすべての違いを生むことができます。たとえば、f3の名前が "useAndDispose"またはそれに類するものである場合、関数の呼び出し元には、使用後にポインタが削除されることが明らかになります。
同様に、関数がユーザーがクリーンアップする必要があるリソースを返す場合は、通常、これを示す名前(getSomethingではなくcreateSomething)が適しています。
ダニエルはあなたに渡されたポインタを削除しないと言っています。しかし、決して "決して"。この機能は、具体的にはクリーンアップ機能であってもよく、ワークフロー状況であって何かが回されて廃棄されてもよい。
あなたのコードを見ている人は決してそれを期待しないので、あなたはあなたに渡された参照を削除してはいけません。
おそらく、他の人が参考になる方が良いでしょう。 'delete'ステートメントは悪いですが、それをラップする必要があります。 – GManNickG
参照渡しはできませんか? –
f2には、決してNULLを取るべきではないという契約があるので、参照はそこでうまくいきます。非constを取るようにオブジェクトを修正するかもしれません。 f1は、NULLを渡して大文字と小文字を処理します。 – CashCow