Delete na pointer – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Delete na pointer – C / C++ – Fórum – Programujte.comDelete na pointer – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Kolemjdouci
~ Anonymní uživatel
71 příspěvků
1. 8. 2013   #1
-
0
-

Ahoj, může mi někdo prosím vysvětlit na tomto případě:

ProstaKocka Micka;
ProstaKocka * ukMourek = new ProstaKocka;
delete ukMourek;

Proč smazáním ukazatele ukMourek a uvolněním paměti dojde k smazání i Micka ? Oboje má jinou adresu umístění v paměti. Když smažu tedy ukMourek tak nemohu smazat i Micka. Nebo když se volá destruktor tak bere vše co se týká jména jedné třídy a maže na vícero místech ?

Nahlásit jako SPAM
IP: 178.255.168.–
Reklama
Reklama
KIIV+42
God of flame
1. 8. 2013   #2
-
0
-

#1 Kolemjdouci
delete ukMourek zavola destruktor nad objektem na ktery se ukMourek odkazuje... Pokud se nezavola delete, tak objekt proste zustava v pameti ikdyz ukMourek prestane existovat.

Micka se smaze automaticky jen co se dostane mimo rozsah platnosti promenne Micka. (konec bloku)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kolemjdouci
~ Anonymní uživatel
71 příspěvků
1. 8. 2013   #3
-
0
-

Aha, děkuji, to mimo rozsah platnosti znamená tedy ukončení funkce int main() ve které je zápis,

tedy v bloku od { do } ? Já si myslel že to má něco společného s ukazatelem ukMourek, takže ten s tim nesouvisí jak se zdá, pouze jde o ten konec bloku ? 

Nahlásit jako SPAM
IP: 178.255.168.–
vitamin+8
Grafoman
1. 8. 2013   #4
-
0
-

#3 Kolemjdouci
Skus si to:

#include <iostream>

struct C{
	static int g_i;
	int i;
	C():i(++g_i){std::cerr << "construct " << i << '\n'; }
	~C(){std::cerr << "~destruct " << i << '\n';}
};
int C::g_i = 0;


int main()
{	
	C c1;
	C c2;
	{
		C c3;
			
	//pred opustenim scopu sa zavola destructor pre c3
	}
	C c4;
	
//pred opustenim scopu sa zavolaju destruktory pre c1, c2, c3 (v opacnom poradi ako boli volane konstruktory) 
}
Nahlásit jako SPAM
IP: 95.105.152.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kolemjdouci
~ Anonymní uživatel
71 příspěvků
1. 8. 2013   #5
-
0
-

Vyzkoušel, sice je to v C a to já se neučím podle struktur :) Ta trojka se smazala a ty ostatní se smažou vlastně při ukončení programu. Jak jsem již psal, mne mátlo, že to má nějakou spojitost s mazáním pointeru a ono ne.

děkuji za rychlé objasnění.

Nahlásit jako SPAM
IP: 178.255.168.–
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, 56 hostů

Podobná vlákna

::delete — založil Koudis

Delete [] — založil Robo

DELETE v MySQL — založil Systém

DELETE komponenty — založil otasimek

C++ - BVS - delete — založil tomas

Moderátoři diskuze

 

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