C++结构体初始化

 今天在看MFC结构时,顺便看了看《深入浅出MFC》,发现有这么一行代码:

 m_pMainWnd = new CMyFrameWnd;

乍一看,很正常啊,再仔细一看,貌似 new CMyFrameWnd 的时候少了一对括号。奇怪!之后又翻了翻书,发现好多处都是这样的。

难道我弄错了,不可能啊,一般情况下在new一个新类的时候都会加上括号,里面放一些初始值。

测试一下:

win32中POINT结构体定义如下:

typedef struct tagPOINT

{

    LONG  x;

    LONG  y;

} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;

调用方式:

(1)POINT* p = new POINT;

(2)POINT* p = new POINT();

 对于(1),debug下可以看到: p 0x003ca130 {x=0xcdcdcdcd y=0xcdcdcdcd} tagPOINT *,

 说明书POINT内部成员没有被初始化。

 对于(2),debug下可以看到:  p 0x003ca130 {x=0x00000000 y=0x00000000} tagPOINT *

 说明书POINT内部成员被初始化了。

于是,我便有了一个简单的结论:当使用(1)时,编译器认为该代码是纯C的代码,所以不为调用该代码的默认构造函数,这样也就不会初始化,因为C没有构造函数这一说,所以也没有见到有人在C里面写成第二种代码样式。当使用(2)时,编译器认为该代码是纯C++的代码,因为C++有类的概念,所以会自动调用结构体的默认构造函数,将成员初始化。貌似正确!

再进行测试:

在MFC中定义一个TEST结构体

typedef struct _Test 

{

    int m_a;

    CString m_str;

} TEST, *PTEST;

(1)TEST* p = new TEST;

(2)TEST* p = new TEST();

结果令我大失所望,(1)和(2)的结果:

  p 0x003adce0 {m_a=0xcdcdcdcd m_str="" } _Test *

居然都没有将m_a初始化。

这与我前面所说的自相矛盾啊。

为什么加入类之后不将内置类型进行初始化呢???

无解了...

 

请高人解答一下。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值