On Thursday 19 of February 2009 12:53:04 Podlesak Kamil wrote:
> Samozrejme, je nutne ten casovac nejak ukoncit, treba zavolanim stop().
> Musi preci vedet, ze ma skoncit - sam si to nevymysli.
Iste. Oznamil by mu to destruktor v MyClassSlave.
> Destruktor (finalizer, etc) by zde vubec nepomohl.
V C++ ano, za podmienky, ze by nebola ta hierarchia class vytvarana pomocou
new(). Vychadzam z nasledovneho predpokladu:
Class C2 {
Timer t;
~C2() {
t.stop();
}
}
Class C1 {
Class c2;
};
main() {
{
C1 c1;
}
// tu by sa automaticky zavolal t.stop() a vsetko by sa vyhodilo z
pamati
}
> Je potreba mit na pameti, jak funguje casovac - nekde v pozadi je specialni
> vlakno, ktere drzi referenci na ten casovac (a tedy na vsechny ty vase
> objekty). Dokud ji drzi, neprovede garbage collector uvolneni.
>
> Samozrejme, v C++ si zivotni cyklus objektu ridite sam a tedy muzete v
> libovolnem okamziku rict, ze objekt znicite. Nemusite se ohlizet na to, ze
> ho nekdo jiny (casovac, v tomto pripade) pouziva. Pokud ho bude pouzivat i
> nadale, tak mate pekny segmentation fault (nebo nejakou jinou veselou
> udalost).
To sa v horeuvedenom pripade nestane.
> Kazdoapdne: v Jave (a vsech jazycich pouzivajicich model "referenci") je
> objekt je znicen az v okamziku, kdy je to zcela bezpecne protoze ho nikdo
> nepouziva.
Ok, dakujem za rady, zariadim sa podla toho. Len mi prislo lepsie sa opytat,
nez rozvrtam kus kodu s neistym vysledkom.
--
Dusan