В деструкторе не нужно занулять члены класса

Компилятор удаляет бесполезные строки в деструкторе, т.к. объект находится в предсмертном состояниии, поэтому в следующем коде зануление ptr фактически не произойдет:

MyObject::~MyObject() {
    delete ptr;
    ptr = nullptr; // эта строка лишняя
}