Вам не нужно реализовывать Dispose () самостоятельно, напрямую или через деструктор. Неявно созданный деструктор уже уничтожает все объекты-члены. Интерфейс IDisposable будет добавлен автоматически, не упоминайте об этом явно.
Далее вам нужно решить, является ли person_data дескриптором (который должен быть установлен для экземпляра, созданного с помощью gcnew) или семантикой объекта-члена (например, семантикой стека, конструктор автоматически вызывается конструктором родительского объекта) объект, деструктор вызывается автоматически, когда заканчивается время жизни родительского объекта, и вы используете "." вместо "->" для доступа к членам).
Кроме того, вы уверены, что хотите, чтобы одна копия person_data была передана всем экземплярам «Globals», но была уничтожена первым экземпляром, который должен быть удален, а остальные экземпляры содержали недопустимую ссылку (ссылку на удаленный объект)? Похоже, вы пытаетесь использовать анти-паттерн Singleton, верно?