Re: Classes in a hierarchy inheriting from the same class
* Joseph Paterson:
Hi all,
This has popped up in a project that I'm working on, and I was
wondering whether it is ok/not ok, and what really happens in the
following case.
I have a base class for most of my classes, called IObject.
Happily the Universal Base Class disappeared sometimes in the mid 1990's.
But now it rears its ugly head again.
<shudder/>.
It
basically has grab()/drop() methods, which increment/decrement a
reference counter. drop() calls delete this if the reference counter
reaches 0.
What's wrong with boost::intrusive_ptr?
They also have a string object, which holds a debug name:
class IObject
{
public:
IObject() : reference_counter(1) {}
void grab();
void drop();
string getDebugName();
};
If this is really an interface, the member functions should be virtual.
But I think it's just misnamed.
I.e., that it's really a class Object.
then I have two classes, say IA (interface to A), and A. I was doing
the following, and got no mistakes:
class IA : public IObject
{
};
class A : public IA, public IObject
{
};
When I create an object of type A, what goes on exactly? Does it
inherit from two IObject instances,
Yes.
and does it have two reference
counters?
Yes.
I put a printf statement in the constructor of IObject, and
it seems that it actually just gets called once, but is that right?
No.
For interface use virtual inheritance.
--
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?