Добрый день,
Я динамически меняю количество реплицированных объектов моего
класса методами setup_ и dispose_
Так же как например это сделано в модели Urban dinamics Agent Based:
setup_person (new Person(), person.size())
и
if ( ...){
dispose_person (this);
}
Проблема в том что, поскольку кто-то из объектов удаляется, а
кто-то добавляется - person.size() - величина не постоянная и создается
несколько реплицированных объектов с одним и тем же номером,
причем абсолютно идентичных (со всеми теми же параметрами и
переменными). Это же можно увидеть в вышеназванной модели Urban Dinamics
в дереве объектов класса Households.
Допустим, это лечится - для создания новых обьектов можно каждый
раз, когда вызывается функция прибавлять единичку к номеру
нового элемента, чтобы не было дубляжей, НО тогда индексация
объектов будет бесконечно расти, а среди более младших индексов
будут образовываться дырки, т.е. например есть у нас агенты 0123, мы
создаем 4 и 5, а 2 умирает, и теперь его место будет всегда пустое.
Можно конечно изощриться и заполнить его место, но может есть
какие-то стандартные средства?
Кроме того, почему-то стали дублироваться объекты не только
новые, но и старые, т.е. у меня дерево объектов выглядит вот так:
-0
-0
-0
-1
-1
-2
-2
Параметры например у нулевого элемента одни и те же во всех трех
случаях, и что самое обидное все эти дубляжи считаются за
полноценные объекты, т.е. в даном случае у этого класса size()=7
И так же во всех моделях в примерах с динамически меняющимся
количеством реплицированных объектов.
Действительно есть такая проблема? Из-за чего это и есть ли
лекарство?!
Заранее спасибо
Виктор Глейм — 18.03.08
Дарья, номер, указываемый в качестве второго параметра метода
setup_[object], нужен лишь для отладки модели и распознавания объектов в
репликации. Иными словами, этот номер является лишь
идентификатором конкретного объекта и не может влиять на
значения переменных и прочих данных в объекте.