Вы можете решить эту проблему, предоставив одному из классов (класса A) контроль времени жизни этого указателя вместе с методом getter. Другой класс (класс B) будет всегда вызывать метод получения A всякий раз, когда ему нужен указатель. Таким образом, A всегда будет контролировать указатель. Недостатком является функция получения (она, вероятно, будет встроенной, но это все еще вторая косвенная информация). Кроме того, B придется проверять этот указатель на NULL практически при каждом использовании.
Ваш другой выбор - заключить указатель в нечто вроде boost :: shared_ptr, который решает проблему (при правильном использовании), удерживая базовый указатель, и удаляя его только тогда, когда все объекты, разделяющие этот указатель, удалены. Вы могли бы написать это самостоятельно, но, поскольку у вас уже есть прирост в игре, я бы просто использовал их реализацию.
Третий вариант заключается в перефакторинге всего этого, чтобы вам не понадобился общий указатель. Лично я никогда не проектировал бы программу на C ++, которая нуждалась бы в общих указателях, просто потому, что это место, где ошибки управления памятью могут легко появиться за эти годы, но это только я.