C/C++編程筆記:什么是不透明指針?一文帶你明白!

什么是不透明指針?
顧名思義,不透明是我們看不到的。例如,木材是不透明的。不透明指針是指向數(shù)據(jù)結(jié)構(gòu)的指針,該數(shù)據(jù)結(jié)構(gòu)的內(nèi)容在定義之時不公開。

跟隨指針是不透明的。通過查看定義,無法知道STest結(jié)構(gòu)中包含的數(shù)據(jù)。
struct STest * pSTest;
將NULL分配給不透明的指針是安全的。
pSTest = NULL;
為什么不透明的指針?
在某些地方,我們只想提示編譯器“嘿!這是我們的客戶將使用的某些數(shù)據(jù)結(jié)構(gòu)。不用擔心,客戶將在準備編譯單元時提供其實現(xiàn)”。當我們處理共享代碼時,這種類型的設(shè)計是健壯的。請參見以下示例:
假設(shè)我們正在開發(fā)一個用于處理圖像的應用程序。由于我們生活在一個萬事俱備的世界中,而且購買設(shè)備的價格非常便宜,因此我們希望開發(fā)適用于Windows,Android和Apple平臺的應用程序。因此,根據(jù)我們的要求,有一個健壯,可擴展和靈活的好的設(shè)計將是很好的。我們可以擁有所有平臺都可以使用的共享代碼,然后不同的端點可以擁有平臺特定的代碼。
為了處理圖像,我們有一個CImage類,該API公開了API以處理各種圖像操作(縮放,旋轉(zhuǎn),移動,保存等)。
由于所有平臺都將提供相同的操作,因此我們將在頭文件中定義此類。但是,跨平臺處理圖像的方式可能有所不同。就像Apple可以使用與Windows不同的機制來訪問圖像的像素。這意味著API可能需要不同的信息集來執(zhí)行操作。因此,要處理共享代碼,這就是我們要做的事情:
Image.h:用于存儲類聲明的頭文件

.
Image.cpp:將在不同端點之間共享的代碼

Image_windows.cpp:特定于Windows的代碼將駐留在此處

Image_apple.cpp:特定于Apple的代碼將駐留在此處

從上面的示例可以看出,在定義CImage類的藍圖時,我們僅提及存在SImageInfo數(shù)據(jù)結(jié)構(gòu)。
SImageInfo的內(nèi)容是未知的?,F(xiàn)在,由客戶(Windows,Apple,Android)負責定義該數(shù)據(jù)結(jié)構(gòu)并根據(jù)其要求使用它
如果將來我們要為新的端點“ X”開發(fā)應用程序,那么該設(shè)計已經(jīng)存在。我們只需要為端點“ X”定義SImageInfo并相應地使用它即可。
請注意,上述示例是執(zhí)行此操作的一種方法。設(shè)計全部是關(guān)于討論和需求的。決定好設(shè)計時要考慮到許多因素。我們還可以具有特定于平臺的類,例如CImageWindows,CImageApple,并將所有特定于平臺的代碼放在此處。
文章來源丨極客(geeksforGeeks)

每天學點小知識,希望對你有幫助~
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
微信公眾號:C語言編程學習基地
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
