我有许多发送器和接收器函数,它们按层次结构相互传递数据:
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
的组合来获取参数类型和返回值。
如果你善意地建议我参数和返回值的最佳类型,我感激不尽。
希望我能很好地解释这个问题。 谢谢
答案 0 :(得分:1)
将对象传递给方法/函数以避免大量复制的标准方法是使用对const的引用:
void my_method(const BigObject & big)
{
// do something with big
}
&
使其成为参考并避免对象的深层复制。 const
受助者无需进一步修改。
在C ++中还有很多其他方法可以避免复制,比如移动构造函数模式,传递指针(我建议将它们包装在std :: shared_ptr中)....这取决于你的设计。