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.)
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.
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?
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.
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!
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!