Просто предположение:
Каждый класс является ссылочным типом, означающим, что память выделяется в куче, и вызывающая сторона получает доступ к фактическим данным через указатель.Например:
Customer c1 = new Customer('CUSTID'); // "Customer" is a reference type
Customer c2 = c1; // "c1" and "c2" points to the same memory within the heap
Каждая структура - это тип значения, означающий, что память выделена в стеке, и вызывающая сторона имеет дело с фактическим экземпляром, а не со ссылкой на этот экземпляр.Например:
Customer c1 = new Customer('CUSTID'); // "Customer" is a value type
Customer c2 = c1; // New memory gets allocated for "c2" within the stack
Рассматривая ваш пример:
this = new Customer();
Выполнение следующей операции над структурой просто инициализирует ее нулевыми значениями:
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
НадеюсьЯ не знаю, почему это невозможно с ссылочными типами, но я предполагаю, что для этого потребуется пройти весь граф объекта, чтобы полностью «сбросить» его (что может быть непростой задачей).Я предполагаю, что это станет полезным в случае циклических ссылок.
Опять же, это только мои мысли, и я бы очень хотел, чтобы кто-то либо доказал, либо отвергнул (с объяснением, конечно) их.