关于初始化 含指针的结构体类型的 静态成员变量
在我的类里面有一个静态成员变量,是一个下面这样的结构体
typedefstruct
{
GLubyte*imageData;
GLuintbpp;
GLuintwidth;
GLuintheight;
} TextureImage;
我在类外初始化的时候用这不同的两种形式
TextureImage TGALoader::tmpTexture;
TextureImage TGALoader::tmpTexture = {NULL, 0, 0, 0};
发现第一种imageData的值是0x00000000,第二种imageData的值反而是0x00000002
这是为什么呢?是因为字节对齐的问题导致的吗?
如果是这样,有什么方法显式地初始化这个静态变量?(就是对imageData调用ZeroMemory之类的)
PS:我设计的这个类屏蔽了一切构造函数,这个类不需要实例
静态成员变量 结构体
[解决办法]
你的那个imageData这个指针,它没有适合的内存空间,即使你new了一个对象,但是你还得与之分配恰当的内存空间,不然野指针,未定义的结果,你的第二种初始化时你初始化为null,这个是可以的,没有任何的问题
[解决办法]
第二种方法是正确的,结果不应该是0x00000002。
可以考虑用下面的方法:
struct TextureImage
//声明匿名struct并且进行typedef 是C的风格,在C++中直接命名更合理
{
TextureImage(){}
//缺省构造函数,什么都不做。写上它是因为编译器不会自动生成它了。
TextureImage(GLubyte * a_data, GLuint a_bpp, GLuint a_width, GLuint a_height)
: imageData(a_data)
, bpp(a_bpp)
, width(a_width)
, height(a_height)
{}
//带初始化的构造函数,可以用它来初始化。
//副作用就是会导致编译器不自动生成缺省构造函数。
GLubyte *imageData;
GLuint bpp;
GLuint width;
GLuint height;
} ;
TextureImage TGALoader::tmpTexture(0,0,0,0);