2011-03-07 72 views
2

我有3個類構建一個繼承鏈。其中兩個類是純粹的抽象類(IProxy和IDataProxy),第三個類真的「做這個工作」(DataProxy)。這些類下面(僅示出了這裏CON /析構函數):帶繼承析構函數的警告C4710(非內聯)

IProxy:

class __declspec(dllexport) IProxy 
{ 
public: 
    IProxy() {} 
    virtual ~IProxy() {} 
}; 

IDataProxy:

class __declspec(dllexport) IDataProxy : public IProxy 
{ 
public: 
    IDataProxy() {} 
    virtual ~IDataProxy() {} 
}; 

DataProxy部首:

class __declspec(dllexport) DataProxy : public IDataProxy 
{ 
public: 
    DataProxy(); 
    virtual ~DataProxy() {} 
}; 

DataProxy執行文件:

DataProxy::DataProxy() : m_operationType(eUnknown) 
{} 

當我編譯的類DataProxy與Microsoft C++編譯器(版本12.00.8804)我得到以下警告:

warning C4710: function 'virtual __thiscall IDataProxy::~IDataProxy(void)' not inlined
warning C4710: function 'virtual __thiscall IDataProxy::~IDataProxy(void)' not inlined
warning C4710: function 'virtual __thiscall DataProxy::~DataProxy(void)' not inlined
warning C4710: function 'virtual __thiscall DataProxy::~DataProxy(void)' not inlined

我真的不知道這些警告從COM。我從來沒有告訴編譯器內聯任何東西。我不知道如何擺脫這些警告。

任何人都可以對這些警告有所瞭解嗎?非常感謝!

最好的問候, 奧利弗

回答

4

通過在類中定義構造函數,可以隱式添加inline說明符。虛擬函數(包括析構函數)不內聯。

但是,警告肯定來自一個事實,即dllexport函數必須具有給定的(thiscall)調用約定,因此不會被內聯。虛擬成員函數可以內聯,如果它們被非多態調用。這絕不是這種情況。

@ MSalters的評論提供了爲什麼警告不會發生在IProxy::~IProxy()

要擺脫警告,請在源文件中定義空的析構函數。

+0

IDataProxy是一個純粹的抽象類,應該定義一個接口。我真的不想要一個純粹的抽象類的cpp文件,是嗎? 爲什麼警告不會爲IProxy類發生? – Baldewin 2011-03-07 12:58:06

+1

'IProxy ::〜IProxy'什麼都不做。 'IDataProxy ::〜IDataProxy'調用'IProxy ::〜IProxy',這是一個DLL導出,因此不能被優化。 – MSalters 2011-03-07 15:42:14

+1

那麼你爲什麼要聲明DLL導出,當它包含的是兩個內聯函數?如果你想讓它們在DLL中,那麼必須合理地存在一些.cpp文件。 – 2011-03-07 16:10:09

0

通過提供類析構函數的實現,你問到內聯它們。對於構造函數和成員函數也是如此。

-2

http://msdn.microsoft.com/en-us/library/yd3056cz(v=VS.100).aspx

此鏈接清楚地解釋你需要知道的一切。它清楚地說明警告是什麼,爲什麼會發生,並且警告默認是關閉的。如果內聯定義,則類成員函數隱式內聯。通常需要在提問之前花點功夫 - 例如在編譯器文檔中搜索警告編號。

+0

OP的真正關注是他沒有明確要求內聯。此MSDN文章(及其提供的鏈接)不回答此問題。 – 2011-03-07 12:47:41

+0

問題是關於警告的提示。鏈接釋放了所有的光。 – Puppy 2011-03-07 12:48:35

+0

事實上,我讀了這篇MSDN文章,但從那裏給出的事實不明白我的錯誤是什麼。我也不明白:爲什麼我得到IDataProxy和DataProxy的錯誤,但不是IProxy?是不是所有三個類的結構都與析構函數相同? – Baldewin 2011-03-07 12:54:41