【发布时间】:2018-11-09 10:03:23
【问题描述】:
这个问题可能有点愚蠢,但我对 C++ 还是很陌生,而且距离我上次使用它已经有一段时间了。
我有一个名为 LEDBitmap 的类,它应该保存只有 1 和 0 的位图的宽度、高度和数据。
在头文件中我有以下结构:
struct MapData
{
uint8_t width;
uint8_t height;
uint8_t[][] data;
};
以及下面的构造函数、析构函数和成员变量:
class LEDBitmap
{
public:
LEDBitmap(uint8_t width, uint8_t, height, uint8_t data[][]);
LEDBitmap(uint8_t width, uint8_t, height);
virtual ~LEDBitmap() { };
[...]
private: //members
MapData _map;
};
我现在想编写构造函数,可能还有析构函数,到目前为止,第一个构造函数有以下内容:
//initialize an empty bitmap with only zeros in it
LEDBitmap::LEDBitmap(uint8_t width, uint8_t, height) {
_map.width = width;
_map.height = height;
_map.data = new uint8_t[width][height];
}
这个实现会起作用吗? (可能不是) 我应该麻烦实际实现析构函数吗?
编辑:
根据@gsamaras 的建议调整了我的代码。
_map以前是*_ptr。
编辑:一位朋友建议改用calloc()。因此,我现在有:
LEDBitmap::LEDBitmap(uint8_t width, uint8_t height) {
_map.width = width;
_map.height = height;
_map.data = calloc(width*height*(sizeof(uint8_t));
}
和
class LEDBitmap
{
public:
LEDBitmap(uint8_t width, uint8_t, height, uint8_t data[][]);
LEDBitmap(uint8_t width, uint8_t, height);
virtual ~LEDBitmap() {
free(_map.data);
};
private: //members
MapData _map;
};
【问题讨论】:
-
std::vector<uint8_t>是你想要的。见:stackoverflow.com/questions/2151084/… -
我打算在微控制器上使用它,所以它应该非常轻量级
-
@gsamaras 没关系。
-
uint8_t[][] data;这不是 C++。 Dows 它为你编译? -
@n.m.我很想编译它,看看我做错了什么,但不幸的是,我有很多依赖它的东西,因为它是我已经为微控制器编码的东西的一部分,现在我不得不切换库。
标签: c++ arrays constructor destructor