Topic: deleting objects and access control
Author: rk@theep.boston.ma.us (Robert A. Kukura)
Date: 2 Apr 91 12:51:52 GMT Raw View
I have a class whose constructor and destructor are protected.
Another class is derived from this class and its constructor and
destructor are also protected. The second class declares a third
class to be its friend, but the first class does not. The third class
uses new to create an object of the second class and later uses delete
to destroy it. It looks something like this:
class b {
protected:
b() {}
virtual ~b() {}
};
class d : public virtual b {
friend class f;
protected:
d() {}
virtual ~d() {}
};
class f {
d *dp;
void x() { dp = new d(); }
void y() { delete dp; }
};
This works fine using a port of Cfront 2.1. With g++ 1.37 I get an
error that
In method void f::y ():
destructor for type `b' is protected in this scope
It seems that Cfront is calling the b's destructor from the d's
destructor, whereas g++ is calling both destructors from f::y.
Which compiler is right? I cannot find the answer in the ARM.
--
-Bob Kukura internet: rk@theep.boston.ma.us
uucp: spdcc!theep!rk