2
我在C++中遇到了this article on dynamic linking。名稱靜態對象的綁定
我們可以創建一個C++工廠,它將返回我們感興趣的類的對象。 另外,我們應該在工廠的文件範圍內創建一個靜態對象,以便使用dlsym()
來定位它。 (該文章建議靜態對象不會被名稱損壞)。
爲什麼靜態對象沒有名稱受損?
我在C++中遇到了this article on dynamic linking。名稱靜態對象的綁定
我們可以創建一個C++工廠,它將返回我們感興趣的類的對象。 另外,我們應該在工廠的文件範圍內創建一個靜態對象,以便使用dlsym()
來定位它。 (該文章建議靜態對象不會被名稱損壞)。
爲什麼靜態對象沒有名稱受損?
名稱mangling是爲了幫助解決重載的函數名稱而發明的。您可以定義幾個具有相同名稱的函數,只有計數和參數類型不同。通過名稱修飾,鏈接器可以將這些功能解析到代碼中的正確位置。
與函數的名稱不同,全局名稱空間中的靜態對象的名稱不能重載,因此不需要重新編譯它們。事實上,全局名稱空間之外的對象的名稱已經被損壞。
由於名稱空間的原因,對象名稱實際上可能會被損壞。然而,這個問題具體是關於文件範圍(即全局名稱空間)中的「靜態」對象,在這種情況下,調整可能非常不方便。 – MSalters
@MSalters非常感謝您的評論!我修正了答案,以澄清只有全局名稱空間中的對象的名稱沒有被損壞。 – dasblinkenlight