$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Gottlob Frege (gottlobfrege_at_[hidden])
Date: 2007-05-06 23:59:26
On 5/6/07, Vladimir Prus <ghost_at_[hidden]> wrote:
>
> And gcc warns. Desprite warning being overly wordly, it basically
> warns that C2 has virtual function but lacks virtual destructor.
> Adding virtual destructor to C2 makes the example compile without
> warning.
>
> - Volodya
>
The gcc warning bothers me at times. Particularly in cases like this:
struct Callback
{
virtual int someCall(Foo foo) = 0;
};
void someFunc(Callback * callback);
As shown, the code above is pretty obvious (I hope) - implement a
'Callback' and someFunc will call it with a Foo (for whatever reason).
If I now add a virtual destructor to Callback, am I implying that
someFunc will also delete the callback?!
ie adding the virtual destructor says 'you can delete this from the
base' but I don't always want to say that.
(And yes, in this case I could use a boost::function, or a Callback &
instead of a pointer, etc, but it is just meant to be a simple example
of similar cases that I've seen in actual code.)
The solution we came up with is to include the virtual destructor, but
make it private. And add a comment that the destructor is there to
quiet gcc, but it is private to imply that no one is going to delete
via the base.
Tony