2013-10-03 42 views
1

我正在努力尋找一些非常基本的東西,我希望有人能幫助澄清。就拿這個僞C++代碼:Qt/C++共享變量和類實例的可視性

class T { 
    public 
    QMutex M; 
    int I; 
} 
  1. 如果我實例化此類三次(如3個線程),是否有3個獨立的和不相關的M和I變量?或者所有3個實例共享相同的M和I變量?

  2. 如果一個類有幾個可重入方法(例如:插槽),並且他們訪問M或I,他們訪問該類的一個實例的M還是I?

  3. 我怎麼可以給類的每個實例它自己的變量(如其它情況下不能訪問)

回答

1

如果我實例化這個類三次(如3個線程),還有3個獨立和不相關的M和I變量?或者所有3個實例共享相同的M和I變量?

單獨存在,因爲這些變量是在堆棧中分配的,而不是堆。如果您使用指向不同類實例中相同內存的指針,則可以通過堆對象共享內存值。

如果一個類有幾個重入方法(例如:插槽),並且他們訪問M或I,他們是訪問該類的一個實例的M還是I?

是的,如果您使用類實例上的插槽,它們將訪問這些插槽,除非您明確嘗試訪問其他類實例。

我怎麼可以給類的每個實例它自己的變量(如其它情況下不能訪問)

就像你上面寫的。 :-)雖然,請注意,您編寫了公共可訪問性,因此最終您可以通過任何實例的任何實例訪問它們,但這可能不是您要提及的內容。

+0

Thans Laszlo - 你正在回答我的很多問題!這是否意味着如果我想創建一個QMutex變量M以被類T的很多實例共享,我將不得不使M成爲一個靜態變量? – TSG

+0

@Michelle:是的。希望你不要恨我說我跑了很多你的問題,或許你有時想聽到其他人。 :-) – lpapp