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 回答