Hiding class pointers -- was it a good idea?

James Dennett jdennett at acm.org
Wed Aug 15 22:13:39 PDT 2007


Walter Bright wrote:
> Bill Baxter wrote:
>> I'm starting to seriously wonder if it was a good idea to hide the
>> pointers to classes.  It seemed kinda neat when I was first using D
>> that I could avoid typing *s all the time.  But as time wears on it's
>> starting to seem more like a liability.
> 
> Having classes be by reference only has some serious advantages:
> 
> 1) Classes are polymorphic and inheritable. By making them reference
> only, the "slicing" problem inherent in C++ is completely and cleanly
> avoided.

Trivially avoided in C++ also.

> 2) You can't write a class in C++ without paying attention to assignment
> overloading and copy constructors. With classes as a reference type,
> these issues are simply irrelevant.

Trivial in C++: entity types are declared as "noncopyable", base
classes are made abstract, and problems disappear.

> 3) Value types just don't work for polymorphic behavior. They must be by
> reference. There's no way in C++ to ensure that your class instances are
> used properly by reference only (hence (2)). In fact, in C++, it's
> *extra work* to use them properly.

Declaring them as noncopyable seems to avoid the problems to
which you refer, and should be normal for entity types in C++.

(I'm not sure which extra work you're referring to: using
some form of GC for memory management?)

> Value types are fundamentally different from reference types. D gives
> you the choice.

C++ gives you *more* choice by allowing easier migration between
the two without imposing performance or syntactic differences.

-- James



More information about the Digitalmars-d mailing list