0

階層的にデータを相互に渡す送信者関数と受信者関数がいくつかあります。

class singleton
{
 TYPE3 var; //data populated from a hierarchy
 void Receive(TYPE3 a){ var = a;}
}

class C
{
  void Receiver_from_B(TYPE2 a);
  TYPE3 intermediate_value;
  make_TYPE3(&intermediate_value){....;}//pseudo
  TYPE3 Sender(){ return intermediate_value; }  //finally sends it to a noncopyable class object
};

class B
{
  void Receiver_from_A(TYPE1 a);
  TYPE2 intermediate_value;
  make_TYPE2(&intermediate_value){....;}//pseudo
  TYPE2 Sender_to_A(){ return intermediate_value; } 
};

class A
{
  TYPE_I a;
  TYPE_II b;
  void Receiver_from_down_the-tree(TYPE_I a_){ a = a_};
  void Receiver_from_down_the-tree_(TYPE_II b_){ b = b_};
  TYPE1 intermediate_value;
  void make_TYPE1(&intermediate_value, a , b) {.....;}//pseudo
  TYPE1 Sender_to_B(){ return intermediate_value;} 
};

このようなツリーから蓄積されるデータの量は比較的多いため、送信者から受信者へのデータのコピーをスキップしたいと考えています。

引数と戻り値の型にはconstとの組み合わせが必要だと思います。reference引数と戻り値に最適な型を教えていただければ幸いです。

私が問題をうまく説明したことを願っています。ありがとう

4

1 に答える 1

1

オブジェクトをメソッド/関数に渡して大量のコピーを避ける標準的な方法は、const への参照を使用することです。

void my_method(const BigObject & big)
{
  // do something with big
}

&それを参照にし、オブジェクトのディープコピーを回避します。被const付与者は、それ以上の変更はありません。

C++ には、移動コンストラクター パターン、ポインターの受け渡しなど、コピーを回避する他の多くの方法があります (std::shared_ptr でラップすることをお勧めします)... . それはあなたのデザインに依存します。

于 2013-03-04T06:49:44.077 に答える