Таинственное переполнение стека в конструкторе

Это иерархия классов, которую использует моя программа:

enter image description here

Конструктор TForm_Upgrade_Database выглядит следующим образом :

__fastcall TForm_Upgrade_Database::TForm_Upgrade_Database(TComponent* Owner, int новейшая_версия) : TForm(Владелец) { }

После попытки создать экземпляр формулы

TForm_Upgrade_Database *dlg = new TForm_Upgrade_Database(this, newest_version);

моя программа выдает исключение EStackOverflow

enter image description here

Я остановил программу и снова запустил ее с точкой останова в конструкторе TForm_Upgrade_Database. Через несколько шагов стек вызовов выглядит следующим образом:

enter image description here

Как получается, что конструктор 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
5
задан stukelly 24 May 2012 в 10:11
поделиться