对于客户端/服务器应用程序,我需要发送和接收 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 容器)作为成员就足够了吗?
最佳答案
两台机器都需要:
- 具有相同的字节顺序(对于 int)
- 相同的浮点表示法(double)
- 所有类型的尺寸相同。
- 相同的编译器
- 用于构建应用程序的相同标志。
- 指针不能很好地传递。
但是网络将是这里最慢的部分。
与传输成本相比,序列化大多数对象的成本将是无关紧要的。当然,您的对象越大,成本就越高,但需要一段时间才能产生重大影响。
较高的维护成本也是您应该考虑的因素。
关于c++ - 一个类是 POD 从二进制文件中读取它就足够了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14288328/