2012-09-30 39 views
2

我在C++中遇到了this article on dynamic linking名稱靜態對象的綁定

我們可以創建一個C++工廠,它將返回我們感興趣的類的對象。 另外,我們應該在工廠的文件範圍內創建一個靜態對象,以便使用dlsym()來定位它。 (該文章建議靜態對象不會被名稱損壞)。

爲什麼靜態對象沒有名稱受損?

回答

5

名稱mangling是爲了幫助解決重載的函數名稱而發明的。您可以定義幾個具有相同名稱的函數,只有計數和參數類型不同。通過名稱修飾,鏈接器可以將這些功能解析到代碼中的正確位置。

與函數的名稱不同,全局名稱空間中的靜態對象的名稱不能重載,因此不需要重新編譯它們。事實上,全局名稱空間之外的對象的名稱已經被損壞。

+0

由於名稱空間的原因,對象名稱實際上可能會被損壞。然而,這個問題具體是關於文件範圍(即全局名稱空間)中的「靜態」對象,在這種情況下,調整可能非常不方便。 – MSalters

+0

@MSalters非常感謝您的評論!我修正了答案,以澄清只有全局名稱空間中的對象的名稱沒有被損壞。 – dasblinkenlight