C++,为大数据传递最佳参数和返回类型

标签 c++

我有许多发送方和接收方函数,它们按层次结构相互传递数据:

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;} 
};

这样一棵树积累的数据量比较大,我想跳过从发送者到接收者的数据复制。

我想我需要 constreference 的组合来表示参数类型和返回值。 如果您能建议我最好的参数和返回值类型,我将不胜感激。

希望我能很好地解释问题。 谢谢

最佳答案

将对象传递给方法/函数以避免大量复制的标准方法是使用对常量的引用:

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

& 使它成为引用并避免对象的深拷贝。 const 不接受进一步的修改。

在 C++ 中有许多其他方法可以避免复制,例如移动构造函数模式、传递指针(我建议将它们包装在 std::shared_ptr 中)...。这取决于您的设计。

关于C++,为大数据传递最佳参数和返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194283/

相关文章:

c++ - D 与 C++ 相比有多快?

c++ - 使用 Boost 属性树将 Unicode 字符串写入 XML

c++ - Visual C++ - 从链接器>输入>附加依赖项中排除文件

c++ - C++ shared_ptr::operator* 危险吗?

c++ - 使用 asio 时双重释放或损坏

c++ - MATLAB 到 C++ 代码行转换

c++ - 我应该如何创建一个可以在 OSX 下的 Sublime Text 3 中使用 STDIN 的构建系统?

c++ - 使用指针遍历类的动态分配

c++ - 在 C++ 中根据运行时字符串选择模板

c++ - 如何使用版本名称将二进制文件与库链接