C++的聲明和定義與內存

以前在上學的時候,沒有仔細的看過這個點,一直認爲聲明、定義差不多,也沒有深入的思考。這次重新鞏固的時候,我發現本身這三個點在不同的類型的情況下表現的差別很大。先把最終的結果寫上:

局部變量:聲明和定義在調用的時候同時進行內存分配。

全局變量:聲明的時候不分配內存,定義的時候分配內存(注意,此處的全局變量是指多個文件調用,使用extern聲明的。如果只單個文件調用,還是局部變量一樣)。

函數:聲明和定義的時候不分配內存,調用的時候分配內存。

結構體:聲明和定義的時候不分配內存,實例化的時候分配內存。

類:聲明和定義的時候不分配內存,實例化的時候分配內存。

 

我們常見的是局部變量的方式:

int a = 1;

 這樣其實是把聲明和定義一起做了,我也一直以爲其他的變量都差不多,但是其實想想都不對的。我們使用系統的變量,就好像使用已經弄好的工具一樣,當然直接拿來用就好了。但是如果是我們自己聲明並且定義的變量比如:函數、類、結構體。這種就是新的工具了,肯定要告訴別人:我先把這個工具準備好,但是我不用,等我需要的時候再用。這就是先聲明和定義好了。然後待實例化或者調用的時候才用的例子。所以這裏就會引出靜態成員變量,爲什麼要在類外初始化了。在聲明的時候,沒有內存,但是在實例化的時候靜態的大家要一起用。所以沒有辦法,一定要在類外去初始化一下。否則在多線程的時候就會出現很多的問題,乾脆先把初始化這個事情做了吧。

不知道爲什麼,我總覺得在類外初始化這種設計缺乏美感,感覺是C++在設計的時候一種無奈之舉。因爲這個操作確實很令人費解。

好了,今天就到這裏吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章