我有许多发送方和接收方函数,它们按层次结构相互传递数据:
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
的组合来表示参数类型和返回值。
如果您能建议我最好的参数和返回值类型,我将不胜感激。
希望我能很好地解释问题。 谢谢
最佳答案
将对象传递给方法/函数以避免大量复制的标准方法是使用对常量的引用:
void my_method(const BigObject & big)
{
// do something with big
}
&
使它成为引用并避免对象的深拷贝。 const
不接受进一步的修改。
在 C++ 中有许多其他方法可以避免复制,例如移动构造函数模式、传递指针(我建议将它们包装在 std::shared_ptr 中)...。这取决于您的设计。
关于C++,为大数据传递最佳参数和返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194283/