-2

私はこの1つのクラスを持っています:「InterClass」と言ってください。このクラスは次のように宣言されてMainClassいます。

MainClass.h:

public:
    InterClass *m_pInterClass; 

および MainClass のコンストラクターで:

m_pInterClass = new InterClass(this);

InterClass で MainClass のいくつかの関数を使用したいのでthis、コンストラクターで渡します。これをグローバル ポインターに割り当て、クラス内のあらゆる場所で使用します。

それmain()が最後に到達するまで、すべてが正常に機能します。

私のコードの最後の行は次のとおりです。

delete MainClass;
OutputDebugString("Exiting Application");
return 0;

アプリケーションが " return 0" でクラッシュする コードのいたるところに OutputDebugString() を配置しました。私が絞り込んだのは次のとおりです。DebugViewでは、「InterClass」のデストラクタが実行され、「Exiting Application」が実行され、「InterClass」のデストラクタが再び実行されることがわかります。InterClass のデストラクタが 2 回実行される理由がわかりません。にそれreturn 0;

このアプリケーションの性質上、このアプリケーションにブレークポイントを設定できません。

PS 私は組み込み C プログラマーであり、C++ はまったく初めてです (PC アプリケーションでの作業を余儀なくされています :( )

4

1 に答える 1

4

明らかに、これは三つのルールに従わないというにおいがします。
クラスのコピーコンストラクターコピー代入演算子は、動的に割り当てられたメンバーポインターのディープコピーを実行する必要があります。そうでない場合は、取得した動作を確認する必要があります。

いずれにせよ、一緒にいるために生のポインターメンバーを使用することは避けるべきです。それをスマートポインターでラップする方がはるかに良いです。

于 2012-06-21T14:13:46.700 に答える