Kezdőoldal » Számítástechnika » Programozás » Ezt elmagyarázná valaki?...

Ezt elmagyarázná valaki? Másoló konstruktor C++ .

Figyelt kérdés

A forráskód:

//main.cpp

# include <iostream>

# include <stdlib.h>


typedef unsigned short ushort;

typedef unsigned int uint;


using std::cout;

using std::cin;

using std::endl;



class SIMPLECAT

{

public:

SIMPLECAT();

SIMPLECAT(const SIMPLECAT&);

~SIMPLECAT();

int GetAge()const {return *itsAge;}

int GetWeight()const {return *itsWeight;}

void SetAge(int age) {*itsAge = age;}

private:

int *itsAge;

int *itsWeight;

};


SIMPLECAT::SIMPLECAT():

itsAge(new int(4)),

itsWeight(new int(3))

{cout <<"Konstruktor \n";}



SIMPLECAT::SIMPLECAT(const SIMPLECAT &rhs)

{

cout <<"Copy Konstruktor \n";

itsAge = new int;

itsWeight = new int;

*itsAge = rhs.GetAge();

*itsWeight = rhs.GetWeight();

}


SIMPLECAT::~SIMPLECAT()

{

cout <<"Destruktor \n";

delete itsAge;

itsAge = NULL;

delete itsWeight;

itsWeight = NULL;

}



int main()

{

SIMPLECAT Bolyhos;

cout <<"Bolyhos s age: "<< Bolyhos.GetAge() << endl

<<"Setting Bolyhos to 6 ... \n";

Bolyhos.SetAge(6);

cout <<"Creating Boots from Bolyhos \n";

SIMPLECAT Boots(Bolyhos);

cout <<"Bolyhos s age: "<< Bolyhos.GetAge() << endl

<<"Boots s age: "<< Boots.GetAge() << endl

<<"Setting Bolyhos to 7 ... \n";

Bolyhos.SetAge(7);

cout <<"Bolyhos s age: "<< Bolyhos.GetAge() << endl

<<"Boots s age: "<< Boots.GetAge() << endl;


return EXIT_SUCCESS;

}


Ahogy én tudom:

Itt létrehozzuk a Bolyhos macskát.

Majd létrehozzuk a Boots macskát is úgy,hogy..... nem tudom tovább folytatni :( .


De azt tudom,hogy ilyenkor 'SIMPLECAT Boots(Bolyhos;)' meghívódik a másoló konstruktor.A másoló konstruktor bemenő paramétere egy hivatkozás tehát a Bolyhosnak a másoló konstruktoron belül lesz egy név változata az rhs.

Ezt értem.


A másoló konstruktorban dinamikuson foglalunk le memóriaterületet.

De nem értem itt miért nem lesz memória elszivárgás hisz a régi memóriaterületet nem szabadítjuk fel hanem egyből új memóriaterületet foglalunk le a másoló konstruktorban.


Á már a kérdésemet sem értem :(


2012. márc. 8. 17:51
 1/2 iostream ***** válasza:
68%

Bár nem fogod érteni a válaszom (legalábbis eddig sosem értetted), de azért megpróbálom.


A másoló konstruktorban egy meglévő objektumból létrehozol egy újat. Az újban létrehozol a dinamikus memóriában egy "üres" intet, majd annak az értékét felülírod a már létező objektumból kimásolt értékkel. A meglévő objektum intjeit te nem változtatgatod, nem is tehetnéd, hiszen annak az objektumnak tovább kell élnie. Ráadásul const is.


Bár kicsit furán csinálod a dolgokat, de szivárgás nincs: amit lefoglalsz azt a destruktorban fel is szabadítod.

2012. márc. 8. 18:54
Hasznos számodra ez a válasz?
 2/2 A kérdező kommentje:
Értem! .D
2012. márc. 9. 12:54

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!