2015-04-05 63 views

回答

2

我知道靜態成員不屬於對象。但爲什麼這樣呢?

由於您使用static成員,只要你有一定的數量,所有對象 「共享」,說,例如實例類Foo擁有的數量。這樣的「共享」成員不能屬於特定實例。當正在創建新的Foo對象時,則會增加靜態變量num_instances。如果變量不是靜態的,那麼每個新的Foo都將以一個乾淨的狀態開始,並且不可能知道其他Foo的。例如:

#include <iostream> 

class Foo 
{ 
    static int num_instances; // all instances share this variable 
public:  
    Foo() 
    { 
     ++num_instances; // increment the number of instances 
    } 
    static int get_num() 
    { 
     return num_instances; 
    } 
}; 

int Foo::num_instances = 0; 

int main() 
{ 
    Foo foo1, foo2; 
    std::cout << "We have " << Foo::get_num() << " Foo's" << std::endl; 
} 

而且,當進行靜態數據成員分配的內存?

靜態對象的內存在程序啓動之前分配。

+0

您能否請澄清更多關於「程序啓動前」的時間。 – 2015-04-05 19:16:59

+0

@WhoAmI:'static'成員變量實際上是全局變量。 – pyon 2015-04-05 19:19:59

+0

@WhoAmI即'main()'之前。我不知道更多細節,但我知道初始化的順序是未指定的。也就是說,如果兩個不同類中有兩個靜態成員,則不能保證一個會在另一個類之前初始化(每當類在單獨文件中定義時)。 – vsoftco 2015-04-05 19:20:10

相關問題