Can anyone tell me the proper way to implement a virtual destructor?
any maybe even why it is the way it is.
I read that the derived objects destructor will automatically call the base objects destructor when invoked. i.e. delete
class obj_holder
{
protected:
float x, y;
float x_vel, y_vel;
float tem_grav;
float air_time;
bool moving;
public:
virtualvoid handle_input();
virtualvoid move();
virtualvoid show();
virtual ~obj_holder();
};
//tried with and without this
obj_holder::~obj_holder(){};
//The man
class Man: public obj_holder
{
public:
Man();
void handle_input();
void move();
void show();
~Man();
};
//The ball
class Ball: public obj_holder
{
private:
float t_vel;
public:
Ball();
void handle_input();
void direction(float, float);
void move();
void show();
~Ball();
};
.....
.....
.....
Man::~Man(){}
Ball::~Ball(){}
Errors using empty implementation
[output]src\main.o:main.cpp:(.text+0x96): undefined reference to `vtable for obj_holder'
src\main.o:main.cpp:(.text+0xa2): undefined reference to `vtable for obj_holder'
src\main.o:main.cpp:(.text+0xae): undefined reference to `vtable for obj_holder'
src\main.o:main.cpp:(.text+0xbe): undefined reference to `vtable for obj_holder'
src\main.o:main.cpp:(.text+0x302): undefined reference to `vtable for obj_holder'
src\main.o:main.cpp:(.text+0x30e): more undefined references to `vtable for obj_holder' follow[/output]
errors not using empty implementation
src\main.o:main.cpp:(.text+0xb2): undefined reference to `obj_holder::~obj_holder()'
src\main.o:main.cpp:(.text+0xe6): undefined reference to `obj_holder::~obj_holder()'
src\main.o:main.cpp:(.text+0x9b): undefined reference to `obj_holder::~obj_holder()'
src\main.o:main.cpp:(.text+0xcf): undefined reference to `obj_holder::~obj_holder()'
1 2 3 4
src\main.o:main.cpp:(.text$_ZN3ManD1Ev[Man::~Man()]+0x6): undefined reference to `vtable for obj_holder'
src\main.o:main.cpp:(.text$_ZN4BallD1Ev[Ball::~Ball()]+0x6): undefined reference to `vtable for obj_holder'
src\main.o:main.cpp:(.text$_ZN4BallD0Ev[Ball::~Ball()]+0x6): undefined reference to `vtable for obj_holder'
src\main.o:main.cpp:(.text$_ZN3ManD0Ev[Man::~Man()]+0x6): undefined reference to `vtable for obj_holder'
src\main.o:main.cpp:(.text+0xb2): undefined reference to `obj_holder::~obj_holder()'
src\main.o:main.cpp:(.text+0xe6): undefined reference to `obj_holder::~obj_holder()'
src\main.o:main.cpp:(.text+0x9b): undefined reference to `obj_holder::~obj_holder()'
src\main.o:main.cpp:(.text+0xcf): undefined reference to `obj_holder::~obj_holder()'