Avatar billede driis Nybegynder
09. september 2003 - 20:26 Der er 1 kommentar og
1 løsning

Exception i klasses constructor - hvordan med allokeret memory ?

Hvis jeg har en klasse, Obj, som kan kaste en exception i constructoren, kunne jeg finde på at bruge flg. kode til at sikre at jeg har et brugbart objekt at fortsætte koden med:

bool obj_ok = false ;
int data = 0 ;
while ( !obj_ok )
{
  cin >> data ;
  try
  {
    Obj ny_obj(data) ;
    obj_ok = true ; // vi når kun hertil hvis der ikke kastes en exception
  }
  catch ( BaseExcp &ex )
  {
  // lav noget exception handling
  }
}

Men den hukommelse, der allerede er blevet allokeret, dels til selve objektet, og dels dynamisk allokeret hukommelse constructoren allerede måtte have allokeret, før exception'en kastes - deallokeres denne hukommelse når der kastes en exception ?

Hvis ikke er der jo en potentiel memory leak i ovenstående kode. Hvordan tager man i så fald højde for det ?
Avatar billede arne_v Ekspert
09. september 2003 - 20:47 #1
Det er en potentiel memory leak.

Bjarne Stroustrup diskueter det i The C++ Programming Language 14.4.1 !

Ikke Obj objektet selv men i memory explicit allokeret dynamisk
i Obj constructoren.

Og hans råd er at lave en constructor så den ikke både eksplicit allokerer
memory og kan smide en exception (f.eks. kan allokeringen pakkes
ind i en seperat klasse, som så vil blive destructet i tilfælde
af en exception fordi det er helt færdigt).
Avatar billede driis Nybegynder
09. september 2003 - 21:56 #2
Tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis