c++ - 一个类是 POD 从二进制文件中读取它就足够了吗?

标签 c++ class

对于客户端/服务器应用程序,我需要发送和接收 C++ 对象。我不需要相应的类来做任何花哨的事情,但希望获得最大的性能(关于网络流量和计算)。所以我虽然只是将它们作为二进制字符串传输。基本上我希望能够做到以下几点

//Create original object
MyClass oldObj();

//save to char array
char* save = new char[sizeof(MyClass)];
memcpy(save, &oldObj, sizeof(MyClass));

//Somewhere of course there would be the transfer to the client/server

//Read back from char array
MyClass newObj();
memcpy(&newObj, save, sizeof(MyClass));

我的问题:我的类(class)需要完成什么才能让它发挥作用? 当转移到另一个应用程序时,作为成员的自然指针将不起作用。但是我的类被认为是 POD(在 c++03 和/或 c++11 中)并且没有任何指针或等价物(如 STL 容器)作为成员就足够了吗?

最佳答案

两台机器都需要:

  1. 具有相同的字节顺序(对于 int)
  2. 相同的浮点表示法(double)
  3. 所有类型的尺寸相同。
  4. 相同的编译器
  5. 用于构建应用程序的相同标志。
  6. 指针不能很好地传递。

但是网络将是这里最慢的部分。
与传输成本相比,序列化大多数对象的成本将是无关紧要的。当然,您的对象越大,成本就越高,但需要一段时间才能产生重大影响。

较高的维护成本也是您应该考虑的因素。

关于c++ - 一个类是 POD 从二进制文件中读取它就足够了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14288328/

相关文章:

javascript - jQuery:addClass() 和 removeClass() 出于某种原因不起作用

python - 返回匿名类或对象用作 'struct' 更好吗?

php - 仅当重新初始化继承类中的实例变量时,PHP 中使用单例模式的类继承才有效。但为什么?

javascript - 当现有元素只有类、没有 ID 时,jQuery/Javascript 将唯一元素添加到其他元素

c++ - 将类方法作为 pthread 启动函数传递

c++ - ios_base::getloc 应该是常量还是非常量?

C++ boost json ptree 解析器无法解析字符串

java - java中的 super 构造函数

c++ - C++编译器如何保证常量成员变量的线程安全?

c++ - SDL2_mixer 链接 undefined reference C::B