2012-05-31 23 views
1

在C++中我有一個頭文件小時限定一個抽象類(接口)與空 虛析:C++在頭文件空接口析

class I 
{ 
    public: 

    virtual ~I() {} 
}; 
  • 問題1:對於目標代碼將在每個包含Ih的.cpp文件的目標文件中生成空的析構函數?
  • 問題2:如果問題1的答案是肯定的,這是否會成爲問題(在不同的目標文件中使用相同的方法)?

回答

5

不,它不會。類定義中定義的方法自動爲inline,所以不需要擔心。

請注意,標記爲inline且實際上在二進制中內聯的方法是不同的。 inline只是一個標記(最好是編譯器提示)。尤其是具有virtual的功能。無論方法是否標記爲inline,多態性都能保證正常工作。

+0

有沒有辦法在類定義中定義一個方法但不是內聯? – Giorgio

+0

@Giorgio:不,沒有。它必須內聯才能不違反ODR。 –

+0

@Giorgio據我所知,該標準指出,在一個類中定義的方法是內聯的,所以我不這麼認爲。 –