Ma vyznam pouzivat destruktor

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Retrox
Člen | 11
+
0
-

Dobrý den,

má význam při psaní tříd využívat krom konstruktoru i destruktor. Nikde jsem nenašel rozumné popsaní přínosu destruktoru. V případě uvolňování paměti při použití destruktoru nevidím žádný nebo bez něj jsem nezaznamenal rozdíl.

David Matějka
Moderator | 6445
+
0
-

destruktor je vhodny napriklad k ukonceni spojeni, odemceni zamku, ulozeni stavu apod

Editoval matej21 (13. 2. 2014 12:22)

Retrox
Člen | 11
+
0
-

Tomu rozumím, ale primárně významově slouži k uvolnění alokované paměti v jiných programovacích jazycích. Proto se ptám zda má při tvorbě třídy ma význam destruktor vytvářet. Například pro tento příklad:

<?php

class A {

	private xx;

	public function __construct(){

	}

	public function __desctruct(){
		unset($this->xx);
	}
}
?>

Chápu využití destruktoru pro vyvolání jiných akcí při zániku objektu. Mně jde primárně o to uvolňování paměti a podobné věci ne o vyvolávání akcí až tak s objektem nesouvisející protože se dají řešit jinak.

Majkl578
Moderator | 1364
+
0
-

Uvolňování paměti? Tady nejsme v C/C++.

Šaman
Člen | 2666
+
0
-

Vzhledem k tomu, že PHP aplikace se spustí, projde nějakým životním cyklem, odešle response a pak se zahodí, tak není potřeba používat destruktory.
Když spustíš desktopovou aplikaci, tak je spuštěná a zabírá paměť stále, dokud ji neukončíš, tam má cenu po sobě uklízet.

Majkl578
Moderator | 1364
+
0
-

Smysl uklízet platí ale jen pro zdroje jako připojení k databázi apod., popř. nějaký sockety atd., rozhodně ne pro obyčejné stringy, o to se stará garbage collector a refcount systém.

Retrox
Člen | 11
+
0
-

Ano souhlasím, ale pokud se začneme bavit o úlohách které běží napřiklad 2 hodiny tak nakládání s pamětí a její uvolňování hraje význam. Zatím jsem nezaznamenal, že by garbage collector efektivně zafungoval. Jedná se mně o tento typ úloh, ale možná řeším hloupost protože odpověď může být na snadě php není vhodné pro tento druh úloh.

David Matějka
Moderator | 6445
+
0
-

tak to hledej reseni jinde nez v destruktoru. kratce: kdyz na objekt (nebo i jinou hodnotu) nevede zadna reference (nedrzi se v zadne promenne), dojde k uvolneni pameti. problem je, ze nektere sluzby/tridy si v drzeji v sobe jiny objekty, aniz bys o tom nutne vedel nebo to chtel, – prikladem je treba UoW v doctrine