Как проверить существует ли указатель или был удален?
В Си++11 для этого есть два класса: std::shared_ptr и std::weak_ptr.
Первый служит для того, чтобы несколько указателей «смотрели» на один объект, и при исчезновении ВСЕХ объект автоматически исчезал.
Второй «смотрит» на тот же объект, что управляется shared_ptr’ами, но не мешает объекту удаляться. Его можно преобразовать в shared_ptr и тогда уж посмотреть, исчез объект или нет.
UPD. Вы делаете свой shared_ptr. Тогда, если shared_ptr не NULL — значит, считаем, что объект действительно там есть! А если кто-то удалил своими силами — значит либо shared_ptr глючный, либо кто-то удалил объект в объод семантики умных указателей.
Кроме того, код по ссылке странный. if (ref_count == 0) — это мы сравниваем указатель с NULL! Написано «переписываем оператор равенства» — по факту переписываем операцию присваивания…
Использовать shared_ptr/unique_ptr вместо сырых указателей.