これは、私のプログラムが使用するクラス階層です。
TForm_Upgrade_Database のコンストラクタは次のようになります。
__fastcall TForm_Upgrade_Database::TForm_Upgrade_Database(TComponent* Owner, int newest_version) : TForm(Owner) { }
Formular のインスタンスを作成しようとした後
TForm_Upgrade_Database *dlg = new TForm_Upgrade_Database(this, newest_version);
私のプログラムは EStackOverflow 例外をスローします
プログラムを停止し、TForm_Upgrade_Database コンストラクターのブレークポイントで再度実行しました。いくつかのステップの後、コールスタックは次のようになります。
TCustomForm コンストラクターがその子孫のコンストラクターを呼び出そうとするのはどうしてですか?
最小限のテスト ケース:
so_project.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "f_form.h"
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
TForm_Upgrade_Database *form = new TForm_Upgrade_Database(NULL, 10);
delete form;
form = NULL;
return 0;
}
//---------------------------------------------------------------------------
f_form.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "f_form.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm_Upgrade_Database *Form1;
//---------------------------------------------------------------------------
__fastcall TForm_Upgrade_Database::TForm_Upgrade_Database(TComponent* Owner, int x)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
f_form.h:
//---------------------------------------------------------------------------
#ifndef f_formH
#define f_formH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm_Upgrade_Database : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm_Upgrade_Database(TComponent* Owner, int x);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm_Upgrade_Database *Form1;
//---------------------------------------------------------------------------
#endif