Kezdőoldal » Számítástechnika » Programozás » Index szerinti törlés heterogé...

Index szerinti törlés heterogén kollekcióból?

Figyelt kérdés

class DataBase

{

Data* d[100];

int cnt;

...

};


void DataBase::delete(int idx)

{

if (idx>=cnt)

throw std::out_of_range("too large index");

delete d[idx];

for (int i=idx; i<cnt-1; i++)

d[i]=d[i+1];

cnt--;

}


A kód lefut, helyesen is működik, de memóriaszivárgás van benne. Igazából már amikor megírtam is furcsa volt, hogy működik... mert nem éreztem helyesnek. Sejtem, hogy nem adhatok át csak így pointereket, vagy esetleg azzal lehet gond, hogy így az utolsó kettő ugyanoda mutat. Próbáltam megoldani 10 más módszerrel is, de csak rosszabbak lettek ennél is. Kicsit belezavarodtam. (A Data osztálynak több specializált alosztálya van.)



#programozás #index #C++ #törlés #pointer #index szerinti törlés #heterogén kollekció
2018. ápr. 12. 19:14
 1/4 anonim ***** válasza:
A delete function jónak tůnik, de az nem látszik, hogy hol töltöd fel és hol hívogatod a deletet, ott lehet a baj.
2018. ápr. 12. 19:37
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:
Pedig biztos ezzel van a gond.
2018. ápr. 12. 20:18
 3/4 anonim ***** válasza:

Eleve rossz ötlet a heterogén kollekció. A leszármazottak mérete nem egyezik az ős osztályéval.


Pointerekkel hogy működik?

2018. ápr. 13. 07:45
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:
Ez a kód eléggé hiányos, így nem lehet megmondani. Raw pointer-ek helyett használj unique_ptr-t, ha egyetlen helyről hivatkozol a memóriaterületre, shared_ptr-t, ha pedig másolni is akarod, továbbá weak_ptr-t abban az esetben, ha fennáll reference cycle kockázata.
2018. ápr. 15. 00:44
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2025, 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!