Just a guess:
Every class is a reference type meaning that the memory is allocated in the heap and the caller gets access to the actual data through the pointer. For example:
Customer c1 = new Customer('CUSTID'); // "Customer" is a reference type
Customer c2 = c1; // "c1" and "c2" points to the same memory within the heap
Every struct is a value type meaning that the memory is allocated in the stack and the caller deals with the actual instance rather than with the reference to that instance. For example:
Customer c1 = new Customer('CUSTID'); // "Customer" is a value type
Customer c2 = c1; // New memory gets allocated for "c2" within the stack
Considering your example:
this = new Customer();
Performing the following operation on a struct simply initializes it with zero values:
mov eax,dword ptr [ebp-3Ch] ; Save pointer to "ebp-3Ch" in EAX register
xor edx,edx ; Clear EDX register
mov dword ptr [eax],edx ; Write "zero" by address containing in EAX
I don't know why it's not possible with reference types but my guess is that in will require traversing of the entire object graph to "reset" it completely (which might be not an easy task). I assume that this will become worth in case of circular references.
Again, this is just my thoughts and I'd very much like someone to either prove or discard (with an explanation, of course) them.