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