2

これが私の質問です。一部のクラスに割り当てられたメモリを持つポインターがあります。

Class *pClass = new Class();

今、私はこのオブジェクトをいくつかの関数に渡したいと思っています。関数は、このオブジェクトをコピーするためだけに使用し、変更しません。問題は、オブジェクトを正しく渡す方法です。

void someFunc (const Class &_class);
{
    Class *pClassInFunc = new Class (_class);
    ...
}
...
someFunc (*pClass)

また

void someFunc (const Class *_class);
{
    Class *pClassInFunc = new Class (*_class);
    ...
}
...
someFunc (pClass)

また

void someFunc (Class _class);
{
    // just use _class since it's already a copy
    ...
}
...
someFunc (*pClass)

私は最初の方法を選択しましたが、私には奇妙に見えます。smth はそれが正しくないことを教えてくれます。2 番目のものは、より C スタイルに見えます (またはそうでない?)。そして最後のものはスタックにコピーを作成しますが、これは望ましくありません。それで、最善の解決策は何ですか?回答ありがとうございます。

編集: ちょうど見た、私は忘れていた * pClassInFunc の前に。訂正しました、すみません。

4

1 に答える 1

4

私は最後のアプローチに投票します。呼び出し元のコードがオブジェクトをどのように割り当てたかを正確に気にしないように、関数を設計します。コピーが必要な場合は、オブジェクトを値で取得します。ユーザーの意図をより明確にします。

また、必要がなくなった場合、呼び出し元がオブジェクトから移動することもできます。参照を取得してconstコピーする場合、それはオプションではありません (オブジェクトから移動することはできませんconst)。

呼び出し元のコードが可能であれば、最初からオブジェクトを動的に割り当てることを避ける必要があります。次に、引数を値で受け取ることを選択した場合、オブジェクトを渡すのは非常に簡単です。

于 2013-05-09T21:27:19.320 に答える