Re: Virtual Destructor - Implication & Specification
* Le Chaud Lapin:
On Apr 2, 8:09 am, "Martin Bonner" <martinfro...@yahoo.co.uk> wrote:
On Apr 2, 8:36 am, "Le Chaud Lapin" <jaibudu...@gmail.com> wrote:
What "new/delete heap mismatch problem"?
[snip]
... a problem can arise when a
static library has been used in particular situation - an EXE decides
to interact with a DLL that was built by a programmer who decided to
use the static library for memory allocation to build his/her DLL.
OK, so that's what you mean by "heap mismatch problem": that the object
is allocated on one heap (e.g. in the main program), and an attempt is
made to deallocate it from another heap (e.g. in a Windows DLL).
Well, whether a virtual destructor helps or not depends on the C++
compiler: the C++ standard is silent on the issue of dynamic libraries.
The in-practice: the Visual C++ compiler has supported a workaround for
the problem since and including version 5.0. It relies on using a
non-standard extension ("declspec"), plus a virtual destructor, as
you've noted; see Microsoft KB article Q122675. You can't assume that
that workaround will be implemented by other compilers.
You can instead /take control over allocation and deallocation/ via
standard C++ means.
Namely, by defining operator new and operator delete for the class in
question (you will still need a virtual destructor when destroying an
object polymorphically).
Hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]