不构造函数不分配内存?

请大家看如下的代码

C/C++ code
   
   
#include " stdafx.h " class Test { public : Test() {m_iNumber3 = 4 ; m_iNumber2 = 5 ; m_iNumber1 = 6 ;}; Test( int a){m_iNumber3 = 3 ; m_iNumber2 = 2 ; m_iNumber1 = a;}; void fun() {}; private : int m_iNumber1; int m_iNumber2; int m_iNumber3; }; int main( int argc, char * argv[]) { int temp = 3 ; double temp2 = 4 ; Test a( 1 ); a.fun(); Test * b = new Test( 1 ); b -> fun(); Test c(); // c.fun(); Test * d = new Test(); d -> fun(); return 0 ; }



为什么这里 c.fun();  这句换的注释去了。就编译报错了。还有我看了不写这句话编程出来的程序的内存分配,为什么这里的c不分配内存呢。?

0012FF54  B8 2A 38 00  .*8.
0012FF58  70 2A 38 00  p*8.
0012FF5C  01 00 00 00  ....
0012FF60  02 00 00 00  ....
0012FF64  03 00 00 00  ....
0012FF68  00 00 00 00  ....
0012FF6C  00 00 10 40  ...@
0012FF70  03 00 00 00  ....


&a 0x0012ff5c
&b 0x0012ff58 "p*8"
b 0x00382a70
c CXX0017: Error: symbol "c" not found
&d 0x0012ff54 "?8"
d 0x00382ab8
&temp 0x0012ff70
&temp2 0x0012ff68

 

昨天去面试遇到这个问题。我虽然知道答应 不能说出为什么来。 今天回来认真的看了下。后来在论坛问了了。原来是因为

 

 

 //Test c();//编译器以为你在声明一个函数,函数的返回类型是Test ,参数为空,函数名是c
    Test c;//这样就ok了,声明一个Test对象,名字叫c

 

还有一个小问题 大家注意到了没有。b的地址 减去 a 的地址 是4.。。注意高低内存。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值