• 不透明指針

    編輯
    本詞條由“匿名用戶” 建檔。

    不透明指針

    編輯

    計算機編程中,不透明指針是不透明數據類型的特例,一種聲明為指向某個未指定類型的記錄或數據結構的指針的數據類型。

    不透明指針存在于多種編程語言中,包括 Ada、C、C++、D 和 Modula-2。

    如果語言是強類型的,沒有關于不透明指針類型 T 的其他信息的程序和過程仍然可以聲明類型 T 的變量、數組和記錄字段,分配該類型的值,并比較這些值是否相等。 但是,他們將無法解除對此類指針的引用,只能通過調用一些缺少信息的過程來更改對象的內容。

    不透明指針是一種向普通客戶端隱藏接口實現細節的方法,因此可以更改實現而無需重新編譯使用它的模塊。 這也有利于程序員,因為可以創建一個簡單的界面,并且大多數細節可以隱藏在另一個文件中。 例如,這對于通過共享庫的不同版本提供二進制代碼兼容性很重要。

    這種技術設計模式中被描述為橋接模式。 它有時被稱為句柄類、Pimpl 慣用語(用于指向實現慣用語的指針)、編譯器防火墻慣用語、d 指針或 Cheshire Cat,尤其是在 C++ 社區中。

    例子

    編輯

    阿達

    package Library_Interface 是類型 Handle 是有限私有的; -- 操作...私有類型 Hidden_Implementation; -- 在包體中定義類型Handle是access Hidden_Implementation;end Library_Interface;

    類型 Handle 是指向實際實現的不透明指針,未在規范中定義。 請注意,該類型不僅是私有的(禁止客戶端直接訪問該類型,只能通過操作訪問),而且是有限的(以避免數據結構的副本,從而防止懸空引用)。

    package body Library_Interface is type Hidden_Implementation is record ... -- 實際實現可以是任何結束記錄; -- 操作的定義...end Library_Interface;

    這些類型有時稱為 Taft 類型——以 Ada 95 的主要設計者 Tucker Taft 的名字命名——因為它們是在所謂的 Ada 83 的 Taft 修正案中引入的。

    此示例演示了一種使用 C 語言實現面向對象編程的信息隱藏(封裝)方面的方法。 如果有人想改變 struct obj 的定義,除非 API 也被改變,否則沒有必要重新編譯程序中使用 obj.h 頭文件的任何其他模塊。 請注意,函數可能需要檢查傳遞的指針是否為 NULL,但為簡潔起見,上面省略了此類檢查。

     

    不透明指針

    d 指針模式是不透明指針的一種實現。 由于其優點(如下所述),它常用于 C++ 類中。 d 指針是指向結構實例的類的私有數據成員。 此方法允許類聲明省略私有數據成員,d 指針本身除外。 因此,

    • 隱藏了更多的類實現
    • 向私有結構添加新的數據成員不會影響二進制兼容性

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/195598/

    (4)
    詞條目錄
    1. 不透明指針
    2. 例子
    3. 阿達

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久