Это иерархия классов, которую использует моя программа:
Конструктор TForm_Upgrade_Database выглядит следующим образом:
__ fastcall TForm_Upgrade_Database :: TForm_Upgrade_Database (TComponent *Владелец, int newest_version): TForm (Владелец) {}
После попытки создания экземпляра формы
TForm_Upgrade_Database *dlg = new TForm_Upgrade_Database(this, newest_version);
моя программа выдает исключение EStackOverflow
Я остановил программу и снова запустил ее с точкой останова в конструкторе TForm_Upgrade_Database.После нескольких шагов callstack выглядит следующим образом:
Как получается, что конструктор TCustomForm продолжает пытаться вызвать конструктор своего потомка ???
Minimalконтрольный пример:
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