gpt4 book ai didi

c++ - 带有继承析构函数的警告 C4710(未内联)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:04 24 4
gpt4 key购买 nike

我有 3 个构建继承链的类。其中两个类是纯抽象类(IProxy 和 IDataProxy),第三个类真正“完成工作”(DataProxy)。这些类如下(此处仅显示 con/destructors):

代理:

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

数据代理:

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

DataProxy header :

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

DataProxy 实现文件:

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

当我使用 Microsoft C++ 编译器(版本 12.00.8804)编译 DataProxy 类时,我收到以下警告:

warning C4710: function 'virtual __thiscall IDataProxy::~IDataProxy(void)' not inlined<br/>
warning C4710: function 'virtual __thiscall IDataProxy::~IDataProxy(void)' not inlined<br/>
warning C4710: function 'virtual __thiscall DataProxy::~DataProxy(void)' not inlined<br/>
warning C4710: function 'virtual __thiscall DataProxy::~DataProxy(void)' not inlined

我真的不知道这些警告是从哪里来的。我从来没有告诉编译器内联任何东西。而且我不知道如何摆脱这些警告。

任何人都可以阐明这些警告吗?非常感谢!

最好的问候, 奥利弗

最佳答案

通过在类内部定义构造函数,您可以隐式添加 inline 说明符。虚函数(包括析构函数)不是内联的。

然而,警告肯定来自于 dllexport 函数必须具有给定的 (thiscall) 调用约定,因此永远不会被内联。如果虚拟成员函数被非多态调用,则它们可以被内联。这里永远不会是这种情况。

@MSalters 的评论提供了为什么 IProxy::~IProxy() 不会出现警告的提示。

要消除警告,请在源文件中定义空的析构函数。

关于c++ - 带有继承析构函数的警告 C4710(未内联),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5219850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com