3

プロトタイプ クラスを作成するときは、デストラクタを次のようにレイアウトします。

virtual ~MyClass();

ライブラリでクラスをファイナライズするときに、「仮想」を追加できないことに気付きました。これは正常ですか、仮想が考慮されていますか、それとも何か間違っていますか?

例えば; これを実行しようとすると、コンパイラ エラーが発生します。

virtual MyClass::~MyClass() { }

代わりにこれを行うとうまくいきます:

MyClass::~MyClass() { }

私の質問はvirtual、デストラクタの最終コード書き込みに含める必要がないため、デストラクタは依然として仮想デストラクタとして動作しますか (プロトタイプとして仮想であるため)?

4

2 に答える 2

16

virtualキーワードは、クラス定義内のメンバー関数宣言の一部としてのみ使用されます 。

メンバー関数がクラス定義の外で定義されている場合、virtualキーワードはそこに配置されません。

于 2010-06-14T16:17:08.970 に答える
4

virtual キーワードは、ソース ファイル内の定義ではなく、クラス宣言内 (通常はヘッダー ファイル内) の関数宣言でのみ使用できます。これは、デストラクタだけでなく、すべての関数に当てはまります。

于 2010-06-14T16:17:31.120 に答える