On Monday, 27 August 2012 at 20:22:47 UTC, Era Scarecrow wrote:
On Monday, 27 August 2012 at 14:53:57 UTC, F i L wrote:
in C#, you use 'new Type()' for both classes and structs, and
it works fine. In fact, it has some benefit with generic
programming. Plus, it's impossible to completely get away from
having to understand the type, even in C++/D today, because we
can always make factory functions:
I'm sure in C# that all structs and classes are heap allocated
(It takes after C++ very likely) that's the simplest way to do
it. You can do that in C++ as well, but other than having to
declare it a pointer first. In C++ they made structs 'classes
that are public by default' by it's definition I believe.
Considering how C++ is set up that makes perfect sense.
You're mistaken as FiL pointed out. "new" is simply not a heap
allocation operator in C#, it is a creation operator. Structs in
C# are allocated on the stack or embedded in another object (on
the stack or on the heap). "new X()" creates a new value of type
X, which could be a struct on the stack or a class on the heap.
I like the way C# works in this regard because the way X is
allocated is an implementation detail that is hidden from
clients. If the type X is immutable, then I can freely change it
from struct to class or vice versa without affecting clients that
use X. (Mind you if X is mutable, the difference is visible to
clients since x1 = x2 copies X itself, not a reference to X.)
Plus as mentioned, generic code can use "new T()" without caring
what kind of type T is.