I used to write definitions of my virtual inline destructors for convenience, although this did not work. Today I decided to do a little test to understand what is happening.
dummy.h
#ifndef DUMMY_HEADER
#define DUMMY_HEADER
#include <iostream>
class Dummy
{
public:
virtual ~Dummy() {std::cout << "dummy destroyed" << std::endl;}
};
class DummyEx : public Dummy
{
public:
virtual ~DummyEx() {std::cout << "DummyEx destroyed" << std::endl;}
};
#endif
deleter.cpp
#include "dummy.h"
void deleteDummy(Dummy* dummy)
{
delete dummy;
}
main.cpp
#include "dummy.h"
void deleteDummy(Dummy* dummy);
int main()
{
Dummy* dummy = new DummyEx();
delete dummy;
dummy = new DummyEx();
deleteDummy(dummy);
return 0;
}
I compiled deleter.cppusing g++ -c deleter.cppand I gotdeleter.o
I compiled main.cppwith help g++ -c main.cppand gotmain.o
I linked the object files to g++ deleter.o main.oand I gota.out
When I execute a.out, the output was as expected, there were both cout of destructors Dummyand DummyEx.
? , . , , .