質問

すべて

また、昨今 質問 にダルのデザイン。そのような気が通過する参照オブジェクトを関数の機能をpopulatingそのオブジェクトは、インターフェイスのためのC++データアクセス層は、例えば

  bool DAL::loadCar(int id, Car& car) {} 

後ほど現在決定しているかを使用する場合は、参照ブ::shared_ptrする際には、例えば

  bool DAL::loadCar(int id, boost::shared_ptr<Car> &car)

意思い?なお優位性のですか?

池尾:そういうふうに考えてい影響を定数の正確性の両方の電話?

よろしくお願いします。

役に立ちましたか?

解決

として sbi "とか何かの機能は生まれた。"

しかし、最も重要なことのできるものではありませんNULLは許されるか否かの機能を指すポインタをオブジェクトしています。この機能だけで充填量のデータの一部をしている場合参照下さい:

  • この機能を利用することによりお客様のご利用がないshared_ptrを使用し、スタックです。
  • この機能を使うとshared_ptrはまだ明-shared_ptrはdereferencingオペレーターと参照を返します。
  • NULLを渡してはできません
  • 未入力
  • んの"もの"がんへ

この機能はニーズを店舗のポインタの後利用は見込んの機能が変更になることになるよう保存のポインタを使用し、shared_ptr.

他のヒント

これは、関数が何をするかに依存します。

彼らは常にNULLを渡すことができます -

一般的には、ポインタを取る機能は、彼らはそれに渡すオブジェクトを持っていない場合でも、発信者がこの関数を呼び出す可能性があることを示しています。それは関数の仕様に適合している場合、(スマート)ポインタを使用しています。それは不増加し、MTの環境では、顕著なパフォーマンスヒットすることができ参照カウントを減少することを回避するため、代わりにそれらをコピーする参照番号でスマートポインタをカウント参照を渡すと、最適化(およびない時期尚早1、私は追加する必要があります)です。

引数として非const参照を取る関数は、それが変更される場合がありますことを、有効なオブジェクトを渡されることを期待しています。彼らは有効なオブジェクトを持っていない限り、発信者は、(法的に)その関数を呼び出すことはできません、彼らは機能は、オブジェクトの状態を変更していて喜んでいる場合を除き、彼らはそれを呼び出すことはありません。それは、より良い機能の仕様に適合した場合は、参照を使用しています。

あなたは(つまり、あなたがNULLを渡すために、発信者をしたくない)有効なオブジェクトを受けなければならない場合は、

、その後、すべての手段によって、ブースト:: shared_ptrのを使用しないでください。あなたの第二の例は、細部を無視して....「スマートポインタ」への参照を渡し、「車へのポインタへのポインタ」です。それは参照だから、shared_ptrのオブジェクトはNULLにすることはできません....それは(「ヌル」オブジェクトへすなわち点)はNULL値を持つことができないことを意味しません。

あなたはスマートポインタへの参照は、「より良い」だろうと思うだろう、なぜ私は正確に理解していない - ?呼び出し元関数は、既にスマートポインタを使用しない

「CONST」の意味合いについては...あなたは、

のようなものを意味しています
bool DAL::loadCar(int id, const Car& car) {}

? はい、それは逆効果になる場合は、コンパイラに「車」は変更されないという事実通信(しかし、おそらくあなたはそれを変更したいの!)。

それとも、機能を作ることを意味しない「CONST」、

のようなもの
class DAL{
   bool loadCar(int id, Car& car) const;
}

後者のケースでは、メソッド「loadCarは」DALのオブジェクトを変更しないコンパイラ/ APIのユーザーにcomunicate。これが本当であるならば、そうすることをお勧めします - だけでなく、それはいくつかのコンパイラの最適化を可能にしますが、一般的に、特に場合、関数はDALへの変更を行わないこと(関数のシグネチャ)「契約」に指定することは良いことであると

あなたは(あなたは、これが真のままことを確認して、この方法は、今後誰のものは「DAL」オブジェクトを変更するような方法で「loadCar」機能を変更します)あなたのコードでは、この暗黙の仮定を作ります

最初のケースでは、単に車を渡し、情報を「それを埋めます」。たとえば、「デフォルト」の車を作成し、それを埋めることがあります。私はこの中に1つの不便を参照してください:1貧しい、デフォルト、役に立たない、「空」の車、それが機能から来た後、本当に車で満たされた1:それは2台の車のクラスを持っていることは非常にOOではありません。私には、車は車なので、有効な車でなければなりません。前にして、関数の後に(例えば、私はBに位置Aからドライブすることができます1、私は、加速、ブレーキ、起動、停止することができます1)

私は通常、伝統的なポインタで動作し、(途中で、問題なく)高めないので、私は本当に後者の代替にコメントすることはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top