Connecting Tech Pros Worldwide Help | Site Map

C++ Struct inheritance against class inheritance

 
LinkBack Thread Tools Search this Thread
  #1  
Old July 21st, 2008, 04:45 PM
johnsonlau
Guest
 
Posts: n/a
Default C++ Struct inheritance against class inheritance

When a class derives from a class,
You can use a pointer to the parent class to delete the instance of
child
only when a virtual destructor declared in the parent.

class Parent
{
virtual ~Parent(); // virtual destructor
}

class Child : public Parent
{
}

Parent * instance = new Child();
delete instance;

===============================================

But is it the same when parent is a struct?

struct StructParent {
}

class Child : public StructParent {
}

StructParent * instance = new Child();
delete instance;

Does this mean that I should decleare a virtual destructor in
StructParent
to provide correct information about the parent and a safe delete
operation?
Or I can only write codes like:
Child * instance = new Child();
delete instance;

I'm a little confused.

Can I say that,
if I ensure that I only use pointer to the Child (bug not the
Parent's) and
perform delete operation on it, plus there is no virtual method in
both Parent and Child,
I can define no virtual destructor in struct inheritance and class
inheritance.

Thank you.

  #2  
Old July 21st, 2008, 05:05 PM
Kai-Uwe Bux
Guest
 
Posts: n/a
Default Re: C++ Struct inheritance against class inheritance

johnsonlau wrote:
Quote:
When a class derives from a class,
You can use a pointer to the parent class to delete the instance of
child
only when a virtual destructor declared in the parent.
>
class Parent
{
virtual ~Parent(); // virtual destructor
}
>
class Child : public Parent
{
}
>
Parent * instance = new Child();
delete instance;
>
===============================================
>
But is it the same when parent is a struct?
Yes, it is the same.
Quote:
struct StructParent {
}
>
class Child : public StructParent {
}
>
StructParent * instance = new Child();
delete instance;
This is undefined behavior as you suspected.

Quote:
Does this mean that I should decleare a virtual destructor in
StructParent
to provide correct information about the parent and a safe delete
operation?
That is one way.

Quote:
Or I can only write codes like:
Child * instance = new Child();
delete instance;
That is fine, too.

Quote:
I'm a little confused.
>
Can I say that,
if I ensure that I only use pointer to the Child (bug not the
Parent's) and
perform delete operation on it, plus there is no virtual method in
both Parent and Child,
I can define no virtual destructor in struct inheritance and class
inheritance.
Huh? Of course you can define a virtual destructor. However, in the case you
described, you don't have to.

What you need to keep in mind is that a virtual destructor is needed
whenever you delete an object of derived type through a pointer to a base.
It does not matter whether the type its a struct or a class nor whether it
has other virtual methods or not.

BTW: structs and classes in C++ only differ with regard to the default
access; structs are public by default and classes have private access by
default.


Best

Kai-Uwe Bux
 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,989 network members.