В Дайзе используется ООП. - Объектно ориентированное программирование.(В той же арме, к примеру - процедурное).
Для упрощения понимания указателя -
Представь, что ты создал юнита. Далее тебе надо над ним проводить какие либо махинации, => надо же к нему как то обращаться? - Ты помещаешь его в переменную. Но в скриптах нашего юнита, есть разные обработчики - процедуры, функции и т.д. и т.п. - например, при определенных условиях, наш юнит может умереть. А ты обращаясь к переменной будешь пытаться что либо проделать с ним, и в итоге будешь получать ошибку(в лучшем случае просто ошибку)...
Наглядный пример про птичку уже приводили -
Выгляни в окно, найди глазами птичку, вытяни руку и пальцем укажи на птичку. А теперь отверни голову от окна. - На что указывает твой палец? - На птичку? Точно? - Где гарантия, что она еще не улетела?
Указатель, это не есть переменная в обычном смысле. - Это именно указатель, на некую область в памяти, в которой что то там должно содержаться(не гарантированно).
Поэтому хранить данные об объектах в переменных, и не принято.
И перед работой с указателем, желательно проверять его на NULL - мало ли, что там сталось с объектом, на которого он указывал.
Хранить можно идентификаторы(какие либо, - например UID'ы), используя которые, можно перебрать существующие объекты, и найти необходимый.
Что касается экземпляров - экземпляр класса, это конкретный объект, для которого выделена память, и закреплена за ним - т.е. уже созданный объект, из расписанного тобою класса.
Просто класс
class A
{
}
Создаем экземпляр класса
new A();
new - выделит память под экземпляр класса А, зарезервирует её, и поместит туда объект нашего класса А.