gpt4 book ai didi

c++ - 初始化 const 成员的正确方法

转载 作者:太空狗 更新时间:2023-10-29 22:55:37 27 4
gpt4 key购买 nike

我正在研究一个图形库,目前正在研究优化。据我所知(如果我错了请纠正我),在 GCC/G++ 编译器中,只读变量和常量放在闪存中的文本部分(我正在使用基于 ARM 处理器的嵌入式系统)和这提供了一种有效的方式来保存大块数据,而不是依赖于 RAM。

因此,我需要初始化一个在类中声明的常量数组,这是我的做法:

#include <iostream>

using namespace std;

class BITMAP{
public:
const uint16_t *BMP; // Image for this graphic object

BITMAP(uint16_t *bmp) : BMP(bmp) {} // This is where I initialize the const array

};

class GFX{
public:
void init_bmp();
void render();


private:
// Object
BITMAP *bmp_image;

};

void GFX::init_bmp()
{
cout << "Setting..." << endl;
uint16_t *BMP1 = new uint16_t[2];
BMP1[0] = 0xFFFF;
BMP1[1] = 0xFFFF;
BITMAP bmp_image(BMP1);
cout << "done!" << endl;

delete[] BMP1;
}

void GFX::render()
{
for( int i=0; i<2; i++ )
{
cout << i << ":" << bmp_image->BMP[i] << endl;
}
}

int main()
{
GFX img;

img.test();
img.render();


return 0;
}

每当我尝试读取 BITMAP::BMP 的内容时,上面的代码都会给我一个段错误。上面代码中const uint16_t *BMP 的正确初始化是什么?

最佳答案

有两个问题:bmp_image 从未初始化,并且您在读取数组之前将其删除。

取而代之的是:

BITMAP bmp_image(BMP1);

这样做:

bmp_image = new BITMAP(BMP1);

这些指针应该在每个类的析构函数中删除,而不是之前。

此外,您实际上并不是在创建常量数组。您正在动态创建数组,因为您使用了 new。使其成为放置在文本部分中的编译时常量的一种方法是使用图像创建一个全局数组:

static const uint16_t BMP1[] = {0xFFFF, 0xFFFF};

然后将这个数组传递给BITMAP的构造函数。

关于c++ - 初始化 const 成员的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50869756/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com