首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于初始化 含指针的构造体类型的 静态成员变量

2013-06-26 
关于初始化 含指针的结构体类型的 静态成员变量在我的类里面有一个静态成员变量,是一个下面这样的结构体ty

关于初始化 含指针的结构体类型的 静态成员变量
在我的类里面有一个静态成员变量,是一个下面这样的结构体


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);

热点排行