可能是我自身的原因,經常性的杞人憂天!
在接觸到C++的一些類時,想的有點多了。事實證明,我確實想多了。但是我覺得可能會有和我一樣會多想的小夥伴,我在這分享一個我想多了的栗子!
以前,C語言寫結構體時。結構體成員都是基本類型,比如int、char、double之類的,最多也就裏邊再套一個結構體成員,但它們都有一個特點。它們的大小是固定的,我不會有這樣的擔心。但是,我接觸到string、vector這些類類型時,根據它們的特性:它們能動態擴充,就是你來多少內容,我都能存的下!
然後,我就想:那它們的變量大小是不是也擴充了,那是不是也導致所處的結構體的變量的大小也改變了呢?
因此,我查了下書。找到了答案:總結一下,簡單來說就是,這些動態可變更存儲長度的類都是使用指針,附加動態申請內存實現的。而動態申請的內存本身並不包含在對象的本身大小上面,在對象中保存一個指針,它能夠找到動態申請的內存的地址。所以,你不管動態申請多少內存,它對象中的一個指針總能找得到你,它指針的大小不會發生改變。也就是說,它所在的結構體變量的大小也是不會改變的!
我也寫了一個小程序檢查了一下,大家可以通過運行結果看到結構體變量的大小並沒有改變!
源程序:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
typedef struct Vec
{
vector<int> int_vec;
}Int_vec;
typedef struct Str
{
string str;
}Str_string;
int main(void)
{
Int_vec myInt;
Str_string myString;
cout << "空的 myInt 大小:" << sizeof(myInt) << endl << endl;
cout << "空的 myString 大小:" << sizeof(myString) << endl << endl;
for (int i = 0; i < 10;i++)
{
myInt.int_vec.push_back(i);
}
myString.str = "student";
cout << "有十個元素的 myInt 大小:" << sizeof(myInt) << endl << endl;
cout << "有字符串內容的 myString 大小:" << sizeof(myString) << endl << endl;
return 0;
}
運行截圖: