Bezparametrický destruktor spojového seznamu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Bezparametrický destruktor spojového seznamu – C / C++ – Fórum – Programujte.comBezparametrický destruktor spojového seznamu – C / C++ – Fórum – Programujte.com

 

ondrej39+1
Věrný člen
2. 12. 2014   #1
-
0
-

Ahoj, mám oboucestný spojový seznam (standard, poskládaný z uzlů -> int value a dva ukazatele, na předchozí a následující uzel), na netu jsem našel funkci pro smazání všech hodnot, které se v uzlu nacházejí, nicméně tato funkce je parametrická (předávám jí první uzel seznamu)

void DoubleList::smaz_seznam(DoubleListNode * pHead)
{
	cout << "Mazu seznam." << endl << endl;
	
	DoubleListNode *current = pHead->Next;
	DoubleListNode *previous = pHead;
	while (current)
	{
		delete previous;
		previous = current;
		current = current->Next;
	}
	delete current;
	previous = NULL;
	delete previous;
	// delete pHead;	
};


v mainu standardně volám

DoubleList::smaz_seznam(List);	


problém je ten, že mi v programu zůstane viset toto:

Připojen obrázek.


čehož se pochopitelně mohu zbavit pomocí

List = NULL;
delete List;


nicméně si nejsem jistý, zda je to takhle úplně korektní. Nevytvářel jste někdo bezparametrický destruktor?

Dík,
Ondra
 

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
KIIV
~ Moderátor
+43
God of flame
2. 12. 2014   #2
-
0
-

Coze? Destruktor ma uvolnit zdroje v ramci objektu. Nechapu, na co mas smaz_seznam v objektu, kdyz pak predavas seznam z venku.

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondrej39+1
Věrný člen
2. 12. 2014   #3
-
0
-

#2 KIIV
abych byl uupřímný tak vůbec nevím, co myslíš tím předávat seznam z venku :-D. Mohl bys to, prosím, rozvinout?

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
KIIV
~ Moderátor
+43
God of flame
2. 12. 2014   #4
-
0
-

Nejak asi nechapes princip objektu - jde o to, mit nejake metody a nejake atributy objektu

U obousmerneho seznamu to bude  zacatek z jedne a zacatek z druhe strany a metody pak pro pridavani, odebirani, smazani celeho a tak... krom pridani noveho prvku, nebo ziskani n-teho nepotrebujes parametry a uz vubec ne interni pointery

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
2. 12. 2014   #5
-
0
-

#3 ondrej39
skus nieco taketo:

void DoubleList::smaz_seznam(DoubleListNode* head){
	cout << "Mazu seznam." << endl << endl;
	
	while(head){
		DoubleListNode* next = head->Next;
		delete head;
		head = next;
	}	
}
Nahlásit jako SPAM
IP: 95.105.229.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
KIIV
~ Moderátor
+43
God of flame
2. 12. 2014   #6
-
0
-

#5 vitamin
ta jeho verze je nadherna ukazka, jak se to nema delat

A ty taky sice nadherne smazes vsechny pointery, ale ten z venku jaksi nemenis... 

Proste zlaty objekty

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
3. 12. 2014   #7
-
0
-

#6 KIIV
ondrej39 sem nedal interface listu, dal sem len tu metodu funkciu, z danych informacii sa neda nic lepsie spravyt :)

Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
KIIV
~ Moderátor
+43
God of flame
3. 12. 2014   #8
-
0
-

#7 vitamin
No minimalne by to sneslo predavat &List a uvnitr pouzit  **

Nebo referenci na pointer a volani by zustalo stejne

(Kazdopadne to moc objektove mit nebude. Ten double linked list vypada spis jako by byla trida/struktura pouzita ve smyslu namespace)

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondrej39+1
Věrný člen
3. 12. 2014   #9
-
0
-

#8 KIIV
Program je tvořen normálně takhle:

// main.cpp

DoubleListNode * List = new DoubleListNode(1);

// obousmerny_seznam.h

class DoubleListNode
{
private:
	int value;
	DoubleListNode *Next;
	DoubleListNode *Prev;
public:
	DoubleListNode(int value);	

	friend class DoubleList;
};

class DoubleList
{
public:
	// dealokuje seznam
	static void smaz_seznam(DoubleListNode *pHead);
	// zařadí prvek do seznamu na konec
	static DoubleListNode* Add(DoubleListNode *pHead, int value);
	// odstrani prvek s hledanou hodnotou ze seznamu
	static DoubleListNode* Remove(DoubleListNode *pHead, int value);
	// tisk seznamu v obracenem poradi
	static void TiskReverse(DoubleListNode *pHead);
	// tisk
	static void Tisk(DoubleListNode *pHead);
};

// obousmerny_seznam.cpp

// uvádím jen konstruktor, myslím si, že ostatní funce jsou irelevantní
DoubleListNode::DoubleListNode(int value)
{
	this->value = value;
	this->Next = NULL;
	this->Prev = NULL;
}
Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Satik0
Stálý člen
3. 12. 2014   #10
-
0
-

#9 ondrej39
Mas tam zatim jen dva jazyky - cestina a anglictina, co pridat jeste nemcinu, aby to bylo zajimavejsi? :)

Jinak prece kdyz mas objekt reprezentujici ten seznam, tak mu nemusis do zadne metody posilat ukazatel na pHead, minimalne ten ma mit ta trida DoubleList u sebe, asi by se jeste hodilo mit tam i ukazatel na konec.

smaz_seznam pak muzes volat bez parametru...

Aspon tak jsem si vzdycky myslel, ze OOP funguje   

Nahlásit jako SPAM
IP: 86.49.188.–
KIIV
~ Moderátor
+43
God of flame
3. 12. 2014   #11
-
0
-

#10 Satik
no pouziva vychytavku z Javy - proceduralni programovani zabalene v objektech :D (samy staticky metody a nazev tridy je jen misto namespace :D)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondrej39+1
Věrný člen
3. 12. 2014   #12
-
-1
-
Mimo téma

#11 KIIV
KIIVe, musím uznat, že je sice určitě moc bájový se povyšovat nade mě, člověka, kterej moc programovat neumí, nicméně jsi zatím neřekl vůbec nic konstruktivního a pokud ani nehodláš, ani už sem do tématu psát nemusíš.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
KIIV
~ Moderátor
+43
God of flame
3. 12. 2014   #13
-
0
-

Konstruktivne jsem ti napsal co je objekt, ze si ma drzet informace uvnitr, ze nebudes potrebovat nic z venku.

Taky jsem napsal duvod a reseni toho problemu, proc MIMO smaz_seznam ZUSTAVA PUVODNI POINTER!!!! (kdyz uz teda nechces pouzit objekt ve stylu   class DoubleList { protected: DoubleListNode* head; DoubleListNode* tail; public: /* metody pro praci se seznamem (zadna nepotrebuje jako parametr pointer na head) */ } )

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Satik0
Stálý člen
3. 12. 2014   #14
-
0
-

#11 KIIV
Pořád je na tom líp než já před cca 14 rokama v Delphi - data jsem ukládal místo tříd do recordů a měl jsem vždy jen globálních pole těch záznamů a pracoval jsem s nimi přes globální funkce, které pak šahaly na ty globální pole... :D

Nahlásit jako SPAM
IP: 86.49.188.–
vitamin+8
Grafoman
3. 12. 2014   #15
-
0
-
Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 30 hostů

Podobná vlákna

Výpis spojového seznamu — založil MaxDJs

Mazání ze spojového seznamu — založil Martin Pomichálek

Destruktor — založil Gadael

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý