动态初始化公共char缓冲区

时间:2009-12-10 21:35:55

标签: c++

我是C ++的菜鸟。我有一个关于动态初始化字符缓冲区的问题

class Pkg {
  public:
    Header t;
    char buf[LENGTH];
};

我将通过网络发送课程对象。 标头类转换为网络字节顺序

所以,我想像这样发送它

Pkg ackpkt;

sendto(sd, &ackpkt, sizeof(ackpkt), 0,(struct sockaddr*)socket1,sizeof(struct sockaddr_in);

每次调用sendto之前,都应该动态分配LENGTH字段。 我认为这样做的一种方法是宣布LENGTH是全球性的。

在接收方,我希望在同一个类的对象中接收对象。对象t的数据应该在ackpktrecv.t中组织,缓冲区在ackpktrecv.buf中

recvfrom(sd,& ackpktrecv,sizeof ackpktrecv,0,(struct sockaddr *)& sockaddrs,& len);

如何使用长度与LENGTH相同的字符缓冲区接收对象 任何人都可以建议我以什么方式实现这一目标?

2 个答案:

答案 0 :(得分:1)

由于这是C ++,请考虑使用vector<T>而不是char。

class Pkg {
public:
  Pkg(vector<char>::size_type size) :buf(size) {
  }

  vector<char> buf;
};

这允许您以下列方式发送数据

Pkg ackpkt(someSize);
sendto(
  sd,  
  &(ackpkt.buf[0]), 
  actpkt.buf.size(), 
  0,
  (struct sockaddr*)socket1,
  sizeof(struct sockaddr_in)

答案 1 :(得分:0)

我推荐使用RAII成语:

  • 使Pkg的构造函数采用length参数,并使用buf在构造函数中分配new char[length]
  • 让Pkg的析构函数为delete[] buf

然后每次循环时,只需创建一个具有所需长度的新Pkg对象。