Connecting Tech Pros Worldwide Forums | Help | Site Map

delete by base class pointer?

Gernot Frisch
Guest
 
Posts: n/a
#1: Jul 22 '05
class Base{};
class Obj : public Base{};

std::vector<Base*> vpBase;
Obj o = new Obj();
vpBase.push_back(&o);

// Can I safely do this: ?
delete vpBase[0];

Thank you,
--
-Gernot
int main(int argc, char** argv) {printf
("%silto%c%cf%cgl%ssic%ccom%c", "ma", 58, 'g', 64, "ba", 46, 10);}




Peter Koch Larsen
Guest
 
Posts: n/a
#2: Jul 22 '05

re: delete by base class pointer?



"Gernot Frisch" <Me@Privacy.net> skrev i en meddelelse
news:300m6eF2pvfukU1@uni-berlin.de...[color=blue]
> class Base{};
> class Obj : public Base{};
>
> std::vector<Base*> vpBase;
> Obj o = new Obj();
> vpBase.push_back(&o);
>
> // Can I safely do this: ?
> delete vpBase[0];
>
> Thank you,
> --
> -Gernot
> int main(int argc, char** argv) {printf ("%silto%c%cf%cgl%ssic%ccom%c",
> "ma", 58, 'g', 64, "ba", 46, 10);}
>
>
>[/color]
No - undefined. But for most implementations this will turn out okay. Still
it is a silly example - there's not much going on here.

/Peter


Karl Heinz Buchegger
Guest
 
Posts: n/a
#3: Jul 22 '05

re: delete by base class pointer?


Gernot Frisch wrote:[color=blue]
>
> class Base{};
> class Obj : public Base{};
>
> std::vector<Base*> vpBase;
> Obj o = new Obj();
> vpBase.push_back(&o);
>
> // Can I safely do this: ?
> delete vpBase[0];[/color]

No. The destructor in the base class has
to be virtual.

class Base
{
public:
virtual ~Base() {}
};

Now you are safe.


--
Karl Heinz Buchegger
kbuchegg@gascad.at
Gernot Frisch
Guest
 
Posts: n/a
#4: Jul 22 '05

re: delete by base class pointer?



"Karl Heinz Buchegger" <kbuchegg@gascad.at> schrieb im Newsbeitrag
news:419B253B.B4653E93@gascad.at...[color=blue]
> Gernot Frisch wrote:[color=green]
>>
>> class Base{};
>> class Obj : public Base{};
>>
>> std::vector<Base*> vpBase;
>> Obj o = new Obj();
>> vpBase.push_back(&o);
>>
>> // Can I safely do this: ?
>> delete vpBase[0];[/color]
>
> No. The destructor in the base class has
> to be virtual.
>
> class Base
> {
> public:
> virtual ~Base() {}
> };
>
> Now you are safe.[/color]

Bingo. Now I completele understand 'virtual'. Thank you very much.


Closed Thread