Я пытаюсь создать базовый класс, для которого все производные от него будут автоматически зарегистрированы в другом классе, например:
class System;
class Object
{
public:
Object()
{
System sys;
sys.AddObject(this);
}
virtual ~Object()
{
System sys;
sys.RemoveObject(this);
}
};
class System
{
public:
// Some other processing function which operates on all things derived
// from Object at one time.
void ProcessAllObjectsInExistence();
void AddObject(Object *o)
{
list.push_back(o);
}
void RemoveObject(Object *o)
{
std::vector<Object *>::iterator i = find(list.begin(), list.end(), o);
if (*i != list.end()) list.erase(i);
}
private:
static std::vector<Object *> list;
};
Это законно и определено? Причина, по которой я спрашиваю, заключается в том, что после чтения и записи в элементы данных Object
(не показанные здесь) изнутри ProcessAllObjectsInExistence()
.
я получаю несколько забавных ошибок.
т.е. для одного Object
перед тем, как я вызову System.ProcessAllObjectsInExistence()
, членами являются 0
и 100
, а затем первая строка внутри ProcessAllObjectsInExistence()
является строкой отладки, которая печатает элементы и отображает 0
и 0
. болезненный> <</p>