求教对一个类分配空间并写入数据的问题

xyzinfernity 2014-11-20 06:51:23
以前学数字图像处理时还属于懵懵懂懂抄老师代码的阶段,前段时间由于遇到把一个二维数组转换成图像输出的问题,所以重新回顾了下位图读取的流程。突然一个一直忽略的问题。
我用MyStruct类模仿BITMAPINFO类的,写了下面这段代码
#include <iostream>
#include <fstream>
using namespace std;

struct RGB
{
int r;
int g;
int b;
};
struct MyStruct
{
int i;
RGB rgb[1];
};

int _tmain(int argc, _TCHAR* argv[])
{
MyStruct* pMyStruct = nullptr;
pMyStruct = new MyStruct[sizeof(int) + sizeof(RGB) * 4];

int i = 7;
RGB rgb[4];
for (int k = 0; k < 4; k++)
{
rgb[k].r = 10 + k;
rgb[k].g = 11 + k;
rgb[k].b = 12 + k;
}

ofstream fout("out.bin", ios_base::binary | ios_base::out);
fout.write((char *)&i, sizeof(int));
for (int k = 0; k < 4; k++)
{
fout.write((char *)&rgb[k], sizeof(RGB));
}
fout.close();

ifstream fin("out.bin", ios_base::binary | ios::in);
fin.read((char *)pMyStruct, sizeof(int) + sizeof(RGB) * 4);
fin.close();

if(pMyStruct != nullptr)
delete pMyStruct;
return 0;
}



发现读取1个int和4个RGB时为MyStruct *分配适量内存的话还是可以读取成功,并且可以通过改变RGB数组下标来方便访问而不是通过表达式计算第n个RGB类的指针来访问其数据。
简单来说BITMAPINFO就像下面这样设计类。
class A
{
B b;
C c[1];
};
class B{};
class C{};

那么问题来了,就是要把两个类合在一个新类里,但是其中一个类的数量是不确定的,按照我之前的习惯是把不确定个数的类用指针作为成员然后动态分配内存和清除内存,或者怕麻烦直接用个vector,但是比起上面这种方法麻烦多了,实际编码的时候像这样设计类的情况多不多呢?
...全文
77 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobo_包子 2014-11-20
  • 打赏
  • 举报
回复
你已经把问题复杂化了,这个不是类的设计问题,这只是序列化和反序列化问题。
勤奋的小游侠 2014-11-20
  • 打赏
  • 举报
回复
变长的类成员基本都是用指针表示。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧