我所试图做的是创建一个基类,用于从它派生的任何内容都会自动与其他类被注册,如:在基类构造函数中使用`this`是否有效?
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;
};
这是法律和规定?我之所以问这个问题,是因为我从ProcessAllObjectsInExistence()
里面读取并写入Object
(此处未显示)的数据成员后,发现一些有趣的错误。
即用于单个Object
之前我请System.ProcessAllObjectsInExistence()
成员是0
和100
,然后内部ProcessAllObjectsInExistence()
,第一行是它打印的成员和显示0
和0
调试线。痛苦的> <
请问为什么你没有使'AddObject'和'RemoveObject'静态?如果他们只使用静态的'list'变量,那么我认为没有理由他们不可能是静态的。 – 2012-02-15 09:34:35
这是完整的吗? “对象”的构造函数是否会在*将自身添加到列表之后做些什么? @Joachim:它被称为“Borg”模式,至少这就是Alex Martelli在Python中称之为特定版本的模式。 – 2012-02-15 09:40:08
@JoachimPileborg隐藏的静态和'System'的不同实例令人困惑。如果他要走这条路线,那么'系统'应该是一个单身人士,清楚地表明实际上只有一个有效的实例。 (不管是否只有一个实例,因为他这样做是合适的,还有另外一个问题,我们没有足够的信息来判断它) – 2012-02-15 09:57:23