2016-07-01 42 views
1

我需要转移在网络中的缓冲液中,其中包含以下:如何使用C++通过网络传输缓冲区?

  • 2个字节,其保持总缓冲器大小
  • 2个字节,其保持标头的大小
  • 部首
  • 实际用户消息

这是我所限定的缓冲液:

class Buffer 
{ 
public: 
    Buffer(size_t Capacity); 
private: 
    uint8_t totalSize[2]; 
    uint8_t headerSize[2]; 
    uint16_t header[???];  // incorrect 
    uint8_t user[Capacity]; 
}; 

我想要做的就是喜欢的东西send(reinterpret_cast<unsigned*>(&buffer))Buffer一个实例。

我知道我可以使用new为标题和用户分配内存,但我也试图使缓冲存储器的连续块。

我该怎么做?

回答

1

至于动态内存分配,你不能有动态分配数组。 C++应该使用容器或智能指针来正确处理内存分配和释放。这里的容器例如:

class Buffer{ 
public: 
    //getters and setters 
    ... 
private: 
    uint8_t totalSize[2]; 
    uint8_t headerSize[2]; 
    std::vector<uint16_t> header; 
} 

你不会需要处理能力,也就是说,将其存储在外部,vector会为您处理。

然后你在谈论系列化。这不是在C++中那么简单,你不能只是一个指针指向内存中的类实例位于和转移,它会去错了那么多地方,例如,有填充。你可以看看boost::serialization图书馆或自己写。

相关问题