這次如何分配內存[與靜態成員]?
對象的每個實例將有2個整數,並且所有實例都訪問static
整數(但不要「自己」的話) - 它不是實例的一部分,它是在範圍的類。
N.B.成員在類中聲明,但必須在類外(在cpp文件中)定義,例如:
int MyClass::myMember1 = 42;
...有一個指針也許是靜態成員?
不可以。如果需要,您可以獲取靜態成員的指針,但不會爲每個實例分配一個指針。
靜態成員在應用程序啓動時被分配(並根據cpp文件中的初始化進行初始化),並且可以作爲其他「全局」對象訪問(儘管靜態不在全局名稱空間中,只有它的一個實例)。成員的可訪問性(即public
,private
與protected
)遵循正常規則。
要查看大小的效果,你可以使用sizeof()
;
class MyClass {
public:
int myMember1;
int myMember2;
int myMember3;
};
class MyClass1 {
public:
static int myMember1;
int myMember2;
int myMember3;
};
int MyClass1::myMember1 = 42;
int main(int argc, char* argv[])
{
using namespace std;
cout << sizeof(MyClass) << " " << sizeof(MyClass1) << endl;
}
上述(取決於對準和int
的大小),可以產生的12 8
的輸出。
Demo
這也許值得指出的是,儘管'mc1.myMember1'是合法的,這是風格差。您通常要編寫'MyClass :: myMember1'來明確該值與特定實例無關。 –