我有一个派生自 C 结构的类。该类没有做任何特殊的事情,除了在构造函数中进行初始化、在析构函数中取消初始化函数以及调用 C 函数的一些其他方法。基本上,它是一个普通的包装器。使用 GCC,它抱怨我的析构函数不是虚拟的,所以我做到了。现在我遇到了段错误。
/* C header file */
struct A
{
/* ... */
}
// My C++ code
class B : public A
{
public:
B() { /* ... init ... */ }
virtual ~B() { /* ... deinit ... */ }
void do()
{
someCFunction(static_cast<A *>(this));
}
};
我总是假设static_cast
它将返回正确的指向基类的指针,修剪掉虚拟表指针。所以情况可能并非如此,因为我在 C 函数中遇到了段错误。
通过删除virtual
关键字,代码可以正常工作,除了我收到 gcc 警告。最好的解决方法是什么?随意启发我:)。