C++的声明和定义与内存

以前在上学的时候,没有仔细的看过这个点,一直认为声明、定义差不多,也没有深入的思考。这次重新巩固的时候,我发现本身这三个点在不同的类型的情况下表现的差别很大。先把最终的结果写上:

局部变量:声明和定义在调用的时候同时进行内存分配。

全局变量:声明的时候不分配内存,定义的时候分配内存(注意,此处的全局变量是指多个文件调用,使用extern声明的。如果只单个文件调用,还是局部变量一样)。

函数:声明和定义的时候不分配内存,调用的时候分配内存。

结构体:声明和定义的时候不分配内存,实例化的时候分配内存。

类:声明和定义的时候不分配内存,实例化的时候分配内存。

我们常见的是局部变量的方式:

int a = 1;

 这样其实是把声明和定义一起做了,我也一直以为其他的变量都差不多,但是其实想想都不对的。我们使用系统的变量,就好像使用已经弄好的工具一样,当然直接拿来用就好了。但是如果是我们自己声明并且定义的变量比如:函数、类、结构体。这种就是新的工具了,肯定要告诉别人:我先把这个工具准备好,但是我不用,等我需要的时候再用。这就是先声明和定义好了。然后待实例化或者调用的时候才用的例子。所以这里就会引出静态成员变量,为什么要在类外初始化了。在声明的时候,没有内存,但是在实例化的时候静态的大家要一起用。所以没有办法,一定要在类外去初始化一下。否则在多线程的时候就会出现很多的问题,干脆先把初始化这个事情做了吧。

不知道为什么,我总觉得在类外初始化这种设计缺乏美感,感觉是C++在设计的时候一种无奈之举。因为这个操作确实很令人费解。

好了,今天就到这里吧。

发布了16 篇原创文章 · 获赞 2 · 访问量 2380

猜你喜欢

转载自blog.csdn.net/u011553313/article/details/104170980