this == null // ¿Cómo puede ser posible?

Recientemente me encontré con un comportamiento extraño de mi aplicación. Se ha desarrollado principalmente en C #, pero CLI / C ++ también se usó para lograr un mejor rendimiento. Estaba obteniendo una System.NullReferenceException en un método muy simple en la comparación de TimeSpan:

TimeSpan _timestamp;
void UpdateFrame(TimeSpan timestamp)
{
    if(TimeSpan::Equals(_timestamp, timestamp) == false) 

Era obvio que la única referencia utilizada en esta expresión era implícita this (this._timestamp). Agregué una declaración de afirmación y resultó que esto es realmente nulo. Después de una breve investigación, logré preparar un breve programa que presenta este fenómeno. Es C ++ / CLI.

using namespace System;
using namespace System::Reflection;

public class Unmanaged
{
public:
    int value;
};

public ref class Managed
{
public:
    int value;

    Unmanaged* GetUnmanaged()
    {
        SampleMethod();
        return new Unmanaged();
    }

    void SampleMethod()
    {
        System::Diagnostics::Debug::Assert(this != nullptr);
        this->value = 0;
    }
};

public ref class ManagedAccessor
{
public:
    property Managed^ m;
};

int main(array<System::String ^> ^args)
{
    ManagedAccessor^ ma = gcnew ManagedAccessor();
    // Confirm that ma->m == null
    System::Diagnostics::Debug::Assert(ma->m == nullptr);
    // Invoke method on the null reference
    delete ma->m->GetUnmanaged();
    return 0;
}

¿Alguien sabe cómo puede ser posible? ¿Es un error en el compilador?

Respuestas a la pregunta(2)

Su respuesta a la pregunta