Ничего не приходит на ум! Что я делаю не так?
Под Windows delete вызывает деструктор, под Android — нет.
Unit1.h
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <FMX.Controls.hpp>
#include <FMX.Forms.hpp>
#include <FMX.Controls.Presentation.hpp>
#include <FMX.StdCtrls.hpp>
#include <FMX.Types.hpp>
//---------------------------------------------------------------------------
class TBoxItem : public TPanel
{
private:
TLabel* tInfo;
public:
__fastcall TBoxItem(TComponent* Owner, String fText);
__fastcall ~TBoxItem();
};
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *ButtonNew;
TButton *ButtonDelete;
TLabel *LabelConstructor;
TLabel *LabelDestructor;
void __fastcall ButtonNewClick(TObject *Sender);
void __fastcall ButtonDeleteClick(TObject *Sender);
private: // User declarations
TBoxItem *bi;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.cpp
#include <fmx.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
bi = NULL;
}
//---------------------------------------------------------------------------
__fastcall TBoxItem::TBoxItem(TComponent* Owner, String fText) : TPanel(Owner)
{
Form1->LabelConstructor->Text = Form1->LabelConstructor->Text + " OK";
Parent = (TFmxObject*)Owner;
tInfo = new TLabel(this);
tInfo->Parent = this;
tInfo->TextSettings->HorzAlign = TTextAlign::Center;
tInfo->Align = TAlignLayout::Center;
tInfo->Text = fText;
Height = 32;
Align = TAlignLayout::Bottom;
}
//---------------------------------------------------------------------------
__fastcall TBoxItem::~TBoxItem()
{
Form1->LabelDestructor->Text = Form1->LabelDestructor->Text + " OK";
delete tInfo;
}
void __fastcall TForm1::ButtonNewClick(TObject *Sender)
{
if(!bi)
{
bi = new TBoxItem(this, "BoxItem");
ButtonNew->Enabled = false;
ButtonDelete->Enabled = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonDeleteClick(TObject *Sender)
{
if(bi)
{
delete bi; // под Android деструктор не вызывается, объект не уничтожается ((
bi = NULL;
ButtonNew->Enabled = true;
ButtonDelete->Enabled = false;
}
}
//---------------------------------------------------------------------------
Windows (жму кнопку «new» — получаю «Constructor OK» и панель внизу экрана, жму «delete» — получаю «Destructor OK», панель удаляется)
Android (жму кнопку «new» — получаю «Constructor OK» и панель внизу экрана, жму «delete» — «Destructor OK» не получаю, панель НЕ удаляется)
C++Builder 10.2.3 Tokyo
delete bi; не вызывает деструктор. ((