2013-08-05 65 views
2

我正在閱讀有關C++中句柄類成語的以下鏈接。要提及的是句柄類和指針

http://bytes.com/topic/c/insights/651599-handle-classes-smart-pointer

句柄類通常包含一個指向對象實現。 使用Handle對象而不是實現的對象。此 使執行的對象可以自由更改,而不會影響處理對象的 。這正是指針所發生的情況。對象 發生變化,但指針中的地址不變。

我的問題是什麼呢筆者的意思是「這是三分球。對象 變化,但在指針的地址不。究竟發生了什麼」。欣賞,如果解釋與例子。

感謝您的時間和幫助

+1

坦率地說,我發現上bytes.com的C++代碼最壞的可能實施例。這超出了想象。我會盡可能遠離那個地方。句柄只是一個指向指針的指針,所有好處都來自它。 –

+0

這是非常令人困惑的,但在快速瀏覽文章後,我覺得這兩句話可以忽略不計。 – juanchopanza

+1

句柄更像是* opaque *指針,而不是指向*指針的指針。 –

回答

2

這很直截了當,也許措辭很混亂。

指針指向的對象可以通過程序中的其他東西改變。它的(對象)值可以在代碼中的其他地方更改。但是,指針不會改變指向的位置。這就是爲什麼

實現的對象可以自由更改而不影響Handle對象。

例如,

class Class { 
    public: int data; 
}; 

int main() { 

    Class myClass; 

    Class* myClassPointer = &myClass; 

    Class* otherPointer = &myClass; 
    otherPointer->data = 10; 

    cout << myClassPointer->data << endl; // value changed, pointer still works 

    cin.get(); 
    return 0; 

} 
0

我覺得作者是指這樣的事實,即一個手柄對象可以被複制並拷貝和複製,並在提到對象的原始數據內容的變化都可以訪問通過每個的副本 - 就像它可以用指針完成一樣。

0

例如,在這樣的代碼:

int a = 5; 
int *ap1 = &a; 
int *ap2 = ap1; 

ap1ap2是兩個單獨的對象,其指向一個共同的對象。這些指針對象可以被創建和銷燬,而不需要改變它們指向的對象。