/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Klasse med interface
Fra : Klaus Petersen


Dato : 26-03-03 02:28

Hej NG.

Hvordan kan det være, at destruktoren af klassen "A" ikke bliver kaldt i
følgende kode?

- - - - - -

class InterfaceA
{
private:

public:
virtual void UdskrivTestVar () = 0;
};

class A : public InterfaceA
{
private:
int testvar;

public:
A () { printf ("Konstruktor...\n"); this->testvar = 150; };
~A () { printf ("Destruktor...\n"); };

void UdskrivTestVar () { printf ("%d\n", this->testvar ); };
};

int main(int argc, char* argv[])
{
InterfaceA* objA = new A ();

objA->UdskrivTestVar ();

delete objA;
};



 
 
Bent Wagner (26-03-2003)
Kommentar
Fra : Bent Wagner


Dato : 26-03-03 15:31

In article <b5qvmh$8jj$1@sunsite.dk>, Klaus Petersen wrote:
> Hej NG.
>
> Hvordan kan det være, at destruktoren af klassen "A" ikke bliver kaldt i
> følgende kode?
>
> - - - - - -
>
> class InterfaceA
> {
> private:
>
> public:
> virtual void UdskrivTestVar () = 0;
> };
>
> class A : public InterfaceA
> {
> private:
> int testvar;
>
> public:
> A () { printf ("Konstruktor...\n"); this->testvar = 150; };
> ~A () { printf ("Destruktor...\n"); };
>
> void UdskrivTestVar () { printf ("%d\n", this->testvar ); };
> };
>
> int main(int argc, char* argv[])
> {
> InterfaceA* objA = new A ();
>
> objA->UdskrivTestVar ();
>
> delete objA;
> };

Du skal have en virtual destructor i class InterfaceA.
Den vil sørge for at delete kan finde det rigtige object
som skal slettes.

Bent Wagner

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste