Pereiti prie turinio

Dinamine atmintis grafineje sasajoje C++


Rekomenduojami pranešimai

Sveiki, turiu toki klausima, kaip suprantu kiekviena karta kai yra sukuriamas kazkoks new Class Obj reikia ji ir istrinti. Klausimas kurioje vietoje reiktu trinti ta objekta (tiksliau atminti) grafineje aplinkoje. Imesiu kodo fragmenta

public:
	MyForm(void)
	{
		InitializeComponent();
		//
		//TODO: Add the constructor code here
		//
		ab = new AboSarasas;
		kai = new KainosMiest;
		n = new AboSarasas;
		sar = new AboSarasas;
		pin = new AboSarasas;

	}

protected:
	/// <summary>
	/// Clean up any resources being used.
	/// </summary>
	~MyForm()
	{
		if (components)
		{
			delete components;
		}
	}

private:
	/// <summary>
	/// Required designer variable.
	/// </summary>

	AboSarasas *ab;
	KainosMiest *kai;
	AboSarasas *n;
	AboSarasas *sar;
	AboSarasas *pin;
	double vid;

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki, turiu toki klausima, kaip suprantu kiekviena karta kai yra sukuriamas kazkoks new Class Obj reikia ji ir istrinti. Klausimas kurioje vietoje reiktu trinti ta objekta (tiksliau atminti) grafineje aplinkoje. Imesiu kodo fragmenta

public:
	MyForm(void)
	{
		InitializeComponent();
		//
		//TODO: Add the constructor code here
		//
		ab = new AboSarasas;
		kai = new KainosMiest;
		n = new AboSarasas;
		sar = new AboSarasas;
		pin = new AboSarasas;

	}

protected:
	/// <summary>
	/// Clean up any resources being used.
	/// </summary>
	~MyForm()
	{
		if (components)
		{
			delete components;
		}
	}

private:
	/// <summary>
	/// Required designer variable.
	/// </summary>

	AboSarasas *ab;
	KainosMiest *kai;
	AboSarasas *n;
	AboSarasas *sar;
	AboSarasas *pin;
	double vid;

 

 

~MyForm() (destuktorius) būtų puiki vieta tą padaryti, nebent kažkoks komponentas tampa „nebereikalingas“ anksčiau, tokiu atveju, trink tada, kada objekto nebereikia.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

~MyForm() (destuktorius) būtų puiki vieta tą padaryti, nebent kažkoks komponentas tampa „nebereikalingas“ anksčiau, tokiu atveju, trink tada, kada objekto nebereikia.

Dekui, kaip ir viskas taip. Klausimas tik vienas ka daro tas if components? Nes jei tame if'e prasaus delete obj viskas veikia puikiai, bet jei parasau po ~MyForm() gaunu errora kodel?

                ~MyForm()
               {
                // jei cia trinu atminti gaunu errora
                       if (components)
                       {
                        // cia viskas gerai
                                delete components;
                       }
               }

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dekui, kaip ir viskas taip. Klausimas tik vienas ka daro tas if components? Nes jei tame if'e prasaus delete obj viskas veikia puikiai, bet jei parasau po ~MyForm() gaunu errora kodel?

                ~MyForm()
               {
                // jei cia trinu atminti gaunu errora
                       if (components)
                       {
                        // cia viskas gerai
                                delete components;
                       }
               }

 

 

Nesu kodinęs vindovsui su cpp, todėl ką šiame kontekste tiksliai daro – nežinau.

Šiaip šitas reikalas skaitomas taip: jei components != 0 (nelygu NULL), tada vykdomas kodas. components gali būti NULL tuo atveju, jeigu alokacija, dėl kažkokios priežasties, nepavyko.

Redagavo kashiukas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Čia tau pagal užduotį reikia dinamiškai susikurti objektus? Ar kažką darysi su jais tokio, ko statiškai sukurti objektai neleidžia? Nes daug geresnis variantas būtų susikurti statiškai ir vietoj rodyklės (pointer) perduoti objekto adresą (reference) su & priešakį.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Čia tau pagal užduotį reikia dinamiškai susikurti objektus? Ar kažką darysi su jais tokio, ko statiškai sukurti objektai neleidžia? Nes daug geresnis variantas būtų susikurti statiškai ir vietoj rodyklės (pointer) perduoti objekto adresą (reference) su & priešakį.

Man pagal uzduoti taip duota. Bet idomu kuo tai butu geriau?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kai išsiskiri atmintį statiškai, nereikia rūpintis jos atlaisvinimu, nes tuo pasirūpina kompiliatorius.

 

Statiškai:

void foo(string *s) { ... }

string a("kažkoks tekstas");
foo(&a);

 

Dinamiškai:

void foo(string *s) { ... }

string *a = new string("kažkoks tekstas");
foo(a);
delete a;

 

Abejais atvejais veikimas toks pats — funkcija foo gauna kaip parametrą nuorodą į string'ą – tačiau pirmu atveju vietą objektui išrenka kompiliatorius, o antru — tu pats.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...