Autor Téma: Vlastná trieda - Cosi.Create(Self)  (Přečteno 2799 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Vlastná trieda - Cosi.Create(Self)
« kdy: 19-10-2019, 11:01:51 »
Nechcem sa starať o zničenie Cosi. Teraz to mám tak, že mu Owner nastavím na aktuálny formulár. Keďže používam podformuláre + k nim jednotky a tak mi tam vznikajú nepríjemné závislosti (priam kruhové odkazy). Týchto závislosti sa chcem zbaviť. Prišli mi na um dve riešenia:
  • VlastnaTrieda = class(TComponent). Tu narážam na problém, že Create sa nezhoduje s rodičovským. Okrem toho potrebujem viackrát constructor. Mám aj constructor Create(...); overload; virtual; Snáď to je tak v poriadku.
  • VlastnaTrieda = class. To je súčasný stav. Aby som dosiahol požadované, tak by som si tu mohol vytvoriť nejaký komponent, ktorý by som používal len ako Owner. Ten by som zničil v Destroy a on by sa postaral o všetko ostatné
Alebo mám na to ísť ináč?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1451
  • Karma: 35
    • Pepak.net
Re:Vlastná trieda - Cosi.Create(Self)
« Odpověď #1 kdy: 19-10-2019, 11:23:49 »
Pokud se nechceš starat o ničení, tak používej interfacy, tam to funguje automaticky.

Kruhové reference s tím nesouvisí. Ty budeš muset vyřešit bez ohledu na technologii, kterou k ničení použiješ.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Vlastná trieda - Cosi.Create(Self)
« Odpověď #2 kdy: 19-10-2019, 13:05:26 »
Pokud se nechceš starat o ničení, tak používej interfacy, tam to funguje automaticky.

Kruhové reference s tím nesouvisí. Ty budeš muset vyřešit bez ohledu na technologii, kterou k ničení použiješ.
Ja som tie interfacy akosi podvedome tušil. Akurát, že o nich nič neviem.
Ak to ničenie vyriešim, tak sa nebudem musieť odkazovať na formulár/podformulár. Tak mi tie kruhové referencie nebudú hroziť. Aj to je dôvod na zmenu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Vlastná trieda - Cosi.Create(Self)
« Odpověď #3 kdy: 19-10-2019, 13:40:52 »
Pre istotu upresňujem o čo mi ide. Príklad:
V potomkovi si vytvorím niekoľko strict private TFDQuery. A tie chcem automaticky zničiť priradením vhodného vlastníka. Formulár či podformulár nie je to pravé orechové. Viď hore.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1451
  • Karma: 35
    • Pepak.net
Re:Vlastná trieda - Cosi.Create(Self)
« Odpověď #4 kdy: 19-10-2019, 14:18:41 »
Pre istotu upresňujem o čo mi ide. Príklad:
V potomkovi si vytvorím niekoľko strict private TFDQuery. A tie chcem automaticky zničiť priradením vhodného vlastníka. Formulár či podformulár nie je to pravé orechové. Viď hore.
A to proč? Proč ty query nezničí přímo objekt, který je vytváří?To jako že když už jsi investoval čas do toho, že jsi vytvořil konstruktor a v něm založil ty query, tak námaha s vytvořením destruktoru a zavoláním FreeAndNil na tytéž objekty už je příliš mnoho práce?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Vlastná trieda - Cosi.Create(Self)
« Odpověď #5 kdy: 19-10-2019, 14:46:45 »
Citace
tak námaha s vytvořením destruktoru a zavoláním FreeAndNil na tytéž objekty už je příliš mnoho práce?
Presne si to trafil ;D  + tam mám kód, ktorý tam nemusí byť. To vieš, my leniví...
Ďalšia vec je, že na to nezabudnem. Ale na to ma upozorní FastMM.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1451
  • Karma: 35
    • Pepak.net
Re:Vlastná trieda - Cosi.Create(Self)
« Odpověď #6 kdy: 19-10-2019, 15:04:16 »
No jak myslíš. Podle mě ses ovšem vydal cestou, která je mnohem náročnější a také mnohem rizikovější na chybu. Já bych ti doporučoval dodržovat standardní pravidlo, že objekty ruší ten, kdo je vytvořil. Ale kdo chce kam...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Vlastná trieda - Cosi.Create(Self)
« Odpověď #7 kdy: 19-10-2019, 15:56:24 »
Citace
Já bych ti doporučoval dodržovat standardní pravidlo, že objekty ruší ten, kdo je vytvořil.
Už na tom pracujem. Tým sa zbavím aj tých závislostí. Ďakujem Ti za čas.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.