comp.lang.ada
 help / color / mirror / Atom feed
From: "Matthew Heaney" <mheaney@on2.com>
Subject: Re: Merits of re-dispatching [LONG]
Date: Thu, 7 Feb 2002 20:29:42 -0500
Date: 2002-02-07T20:29:42-05:00	[thread overview]
Message-ID: <u66a74idn9n084@corp.supernews.com> (raw)
In-Reply-To: 1013094178.985786@master.nyc.kbcfp.com


"Hyman Rosen" <hyrosen@mail.com> wrote in message
news:1013094178.985786@master.nyc.kbcfp.com...
> Again, this is false for C++. In a C++ constructor or destructor, the
> type of the object is the type of the class of which the constructor or
> destructor is a member. So in the C++ equivalent of Finalize(A), the
> call to Foo(A'Class) would call Foo(A), not Foo(AA), because in
> the destructor of A, the object is an A, not an AA, even when we
> are destructing the A component of an AA. This is good, since, as
> you point out, the AA part is no longer there!

Yes, that's true, but it's easy to think that the virtual member function
call will dispatch, because that's how it works for every other virtual
member function:

class B
{
public:
   virtual ~B();
   virtual void f();
   virtual void g();
};

void B::f()
{
   g();  //dispatches
}

B::~B()
{
   g();  //does not dispatch
}

You have to learn that the call to g() doesn't dispatch in the dtor.  This
behavior is certainly not immediately obvious, especially for those new to
the language.

You seemed to have missed the point about this error-prone feature of C++: a
naive programmer is going to depend on dispatching to occur.  He has to
learn --the hard way-- that the dtor is special.

> True, but the error is that (from their point of view) the wrong function
> gets called, not that the right function gets called on destructed pieces
> of objects.

But the point is that it is an error, that is very easy to make.


> I guess this is another entry for my "why C++ is better than Ada" file :-)

Again, you seemed to have missed the point.  The scenario Dmitry described
cannot happed by accident in Ada95: the programmer must have taken special
action for it to occur.  This is not the case in C++.

(Note that I like C++, and I use it every day.  But by any measure Ada95 is
a much safer language than C++.)






  reply	other threads:[~2002-02-08  1:29 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-07 10:26 Merits of re-dispatching [LONG] Dmitry A. Kazakov
2002-02-07 15:03 ` Hyman Rosen
2002-02-08  1:29   ` Matthew Heaney [this message]
2002-02-08  9:16     ` Dmitry A. Kazakov
2002-02-08 18:30       ` Hyman Rosen
2002-02-09  0:10         ` Matthew Heaney
2002-02-12  8:32         ` Dmitry A. Kazakov
2002-02-12 21:37           ` Hyman Rosen
2002-02-13  9:29             ` Dmitry A. Kazakov
2002-02-13 14:32               ` Hyman Rosen
2002-02-13 19:58           ` Dave Harris
2002-02-14 15:06             ` Dmitry A. Kazakov
2002-02-16 12:10               ` Dave Harris
2002-02-18  8:57                 ` Dmitry A. Kazakov
2002-02-18 19:47                   ` Merits of re-dispatching Dave Harris
2002-02-19  9:20                     ` Dmitry A. Kazakov
2002-02-21  5:49                       ` Hyman Rosen
2002-02-21  9:04                         ` Dmitry A. Kazakov
2002-02-21 18:17                           ` Hyman Rosen
2002-02-22  9:21                             ` Dmitry A. Kazakov
2002-02-22 16:59                               ` Hyman Rosen
2002-02-25  8:51                                 ` Dmitry A. Kazakov
2002-02-08 23:51       ` Merits of re-dispatching [LONG] Matthew Heaney
2002-02-12  9:02         ` Dmitry A. Kazakov
2002-02-07 23:40 ` Nick Roberts
2002-02-08  8:56   ` Dmitry A. Kazakov
2002-02-08  1:06 ` Matthew Heaney
2002-02-08  9:48   ` Dmitry A. Kazakov
2002-02-09  0:16     ` Matthew Heaney
2002-02-08 18:10   ` Hyman Rosen
2002-02-09  0:41     ` Matthew Heaney
2002-02-08 18:33 ` Nick Roberts
2002-02-09  4:07   ` Nick Roberts
2002-02-12 10:13   ` Dmitry A. Kazakov
2002-02-14 20:57 ` Tucker Taft
2002-02-15 15:43   ` Dmitry A. Kazakov
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox