S
Shraddha
What is the use of "PURE vitual distructors"?
And why we can not have vitual constructors?
And why we can not have vitual constructors?
What is the use of "PURE vitual distructors"?
And why we can not have vitual constructors?
What is the use of "PURE vitual distructors"?
What is the use of "PURE vitual distructors"?
And why we can not have vitual constructors?
struct Base
{
virtual ~Base()=0{}
virtual void foo(){}
};
struct Base
{
virtual ~Base()=0{}
this is a syntax error
it should be
struct Base
{
virtual ~Base()=0;};
...
Base::~Base() {}
Good point. Also why destructor can be non virtual? Is there any use
for that? I have never seen a real world scenario where destructors
shoudl not be virtual.
On the other hand, constructors can't be virtual as was already
pointed out. Except for one compiler called Borland C++ Builder. That
compiler allowed to declare virtual constructors, although the meaning
was different of what you could expect.
Normally C++ constructors can't make virtual function calls,
because the the VMT (virtual method table) is not fully built
yet,
leading to
subtle and unexpected bugs.
In C++ Builder, you could declare your
constructors to be virtual, meaning that before executing the
constructor, the VMT would be fully built and therefore the virtual
methods would be called as appropiate.
Really? What about structures which are shared with C? Putting
a vptr into the structure isn't going to please the C compiler
any. For that matter, making the destructor virtual for
something like complex<float> could double the size of the
object. An important consideration for people working with
large arrays of the thing. In general, for classes with value
semantics, there's no reason for the destructor to be virtual,
and every reason for it not to be.
Once a class has virtual functions, of course, the question
changes. The vptr is already there, so making the destructor
virtual doesn't change anything in this respect. And the
presence of virtual functions means that there is a very high
probability that inheritance will be involved somewhere, and
that a virtual destructor will be needed. On the other hand,
making the virtuality of the destructor depend on whether other
virtual functions are present or not isn't very orthogonal, to
say the least, and is another complication. And IMHO, C++
already has enough special cases, and doesn't really need
another one.
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.