Я работаю с фреймворком моделирования. Каждая сгенерированная частица имеет слот для указателя на объект UserInfo (так что вы можете прикрепить любую нужную информацию к частице). Проблема в том, что инфраструктура удаляет эту пользовательскую информацию всякий раз, когда частица погибает. Поскольку существует много миллионов частиц, часто с дублирующейся информацией, я хочу создавать новый объект UserInfo только тогда, когда информация отличается. Проблема, конечно, заключается в том, что всякий раз, когда частицу убивают, она удаляет объект UserInfo, на который имеется указатель (независимо от того, присоединен ли этот же объект к какой-либо другой частице).
Какие шаги мне нужно предпринять, чтобы Частица не удаляла объект UserInfo, когда частица убита? Я понимаю, что мне нужно сделать подсчет ссылок и удалить перегрузку для моего класса UserInfo. Тем не менее, я никогда не перегружал удаление ранее, поэтому у меня есть несколько вопросов:
Если у меня есть иерархия классов, например:
class VirtualUserInfo;
class A : public VirtualUserInfo;
class B : public A
...etc
и я перегружаю удаление в классе A, будет ли оно работать, если удаление вызывается по указателю на VirtualUserInfo или по указателю на класс B? (Точно так же, как вы можете перегрузить new для правильной работы? Вам нужно перегрузить new заново для каждого нового производного класса?)
Подсчет ссылок легко выполнить с помощью любопытно повторяющегося шаблона. Есть ли способ включить поведение удаления таким смешанным образом? Было бы неплохо применить этот тип поведения к любому типу UserInfo, который я должен был написать.
Есть ли какой-нибудь кулер / лучший способ сделать то, что я хочу сделать?