Rainer Deyke wrote:
Daniel Keep wrote:
It's not a bug.  There are differences between value types and reference
types.  Just like how there are differences between atomic types and
aggregate types.  Or constant types and mutable types.

This is a bug:

struct MathematicalVector {
  this(int size) {
    this.values = new T[size];
  }
  // No copy constructor.
  // Insert standard mathematical operators here.
  private T[] values; // Implementation detail.
}

I want MathematicalVector to be a value type (which is why I declared it
as a struct).  However, it doesn't behave a value type because I forgot
to write the copy constructor.  D doesn't cause the bug, but it
certainly makes it easier to accidentally write this kind of bug.

By contrast, the compiler-generated copy constructors in C++ usually do
the right thing for all but a handful of low-level resource-management
classes.  Which is not to say that C++ doesn't have problems of its own
- clearly it does, or I wouldn't be looking at D.

C++ ctors won't do the right thing if you use pointers, which is the moral equivalent of using T[] inside MathematicalVector. If you refer to std::vector instead, then that's a carefully-defined type that does have the right copy constructor defined.

Andrei

Reply via email to