gpt4 book ai didi

c++ - boost 串行器 : getting warning C4308 unless using virtual class destructor

转载 作者:太空狗 更新时间:2023-10-29 21:26:05 26 4
gpt4 key购买 nike

我正在处理一个项目,该项目有 2 个类(与我的问题相关)需要序列化。有一段时间,其中一个类编译正常,而另一个类编译时出现以下警告:

...\boost\mpl\print.hpp(51): warning C4308: negative integral constant converted to unsigned type

对于它们两个,我使用 Boost 类导出器来注册这些类,以便稍后我可以安全地将基类指针序列化为它们的实例,如下所示:

BOOST_CLASS_EXPORT_GUID(ClassName, "ClassName")

所以我慢慢消除了两个类之间的差异,发现警告的来源是这样的:安静编译的类有一个虚拟析构函数,因为我打算让其他类继承它可能需要自己的析构函数.

现在,我也只是给了另一个类一个虚拟析构函数,但由于我不打算从它继承,所以这看起来很奇怪。

我的问题是:为什么给类一个虚拟析构函数“修复”这个警告,这个警告的真正含义是什么? BOOST_CLASS_EXPORT_GUID 宏的某些部分是否创建了一个继承 self 的类或其他类的类?

最佳答案

我刚刚发布了这个问题,但我想我可能刚刚意识到至少部分解决方案。

BOOST_CLASS_EXPORT_GUID 宏旨在“注册”一个将从基类继承的类,以防需要序列化包含指向子类实例的基类指针的结构,以便序列化器可以区分指针的类型如

BaseClass* base;// = new BaseClass()
BaseClass* derived;// = new DerivedClass()

为了多态性,没有显式转换它们。

如果要继承一个类,(我认为)给它一个虚拟析构函数是最安全的,这样派生类就可以自行清理。

但是:我不打算从编译有问题的类继承,所以用 BOOST_CLASS_EXPORT_GUID 导出它没有意义。所以我收到了不良做法的警告 - 你不应该导出你以后不会继承的类。

关于c++ - boost 串行器 : getting warning C4308 unless using virtual class destructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12684829/

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