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関数でsegfaultが発生するため、これは当てはまらない可能性があります。
キーワードを削除するvirtual
と、コードは正常に動作しますが、gcc 警告が表示されます。これに対する最善の回避策は何ですか? お気軽に教えてください:)。