[解決済み] "純粋な仮想メソッドが呼び出されました "の解決方法
質問
なぜこのようなことが起こるのかは理解していますが、解決できずに困っています。以下は、私のプログラムが終了するときにエラーが発生する(したがって、クラッシュにつながる)ときに、私のコードが行っていることです...
pure virtual method called
SomeClass::~SomeClass()
{
BaseClassObject->SomePureVirtualMethod(this);
}
void DerivedClass::SomePureVirtualMethod(SomeClass* obj)
{
//Do stuff to remove obj from a collection
}
を呼び出すことはありません。
new SomeClass
がありますが、私は
QList<SomeClass*>
を追加しています。
SomeClass*
オブジェクトを追加します。 のこのデストラクタの目的は
SomeClass
は
DerivedClass
の特定のインスタンスを削除するために
SomeClass
のコレクションから
QList<SomeClass*>
.
では、具体的な例でいうと......。
BaseClass
=
Shape
DerivedClass
=
Triangle
SomeClass
=
ShapeProperties
への参照を所有する
Shape
だから、決して
new ShapeProperties
しかし、私は
QList<ShapeProperties*>
の内部には
Triangle
. のデストラクタは
ShapeProperties
は
Triangle
の特定のプロパティを削除するために
ShapeProperties
のコレクションから
QList<ShapeProperties*>
.
解決方法は?
あなたのデストラクタが呼ばれる頃には、継承したクラスのデストラクタはすでに呼ばれています。コンストラクタやデストラクタの中では、オブジェクトの動的型は事実上、静的型と同じと考えることができます。つまり、コンストラクタやデストラクタの内部で仮想メソッドを呼び出す場合、呼び出されるのはオーバーライドされたバージョンではありません。
もし
SomePureVirtualMethod
をデストラクタで呼び出す必要がある場合は、 欲しいメソッドの実際の定義があるクラスのデストラクタ内でそれを呼び出さなければなりません。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み】'std::cout'への未定義の参照