2011-03-07 69 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