您在这里尝试做的事情有点模棱两可。 ControllerDetail 是一个类而不是一个对象,你会有很多,每个 ControllerPOD 一个。
因此,如果您希望它有一个列表,它必须是静态的。
现在假设您希望 ControllerDetail 拥有当前存在的所有派生自它的对象的静态列表。所以我们会有这个:
class ControllerDetail
{
typedef std::list<ControllerDetail * > list_type;
static list_type instances;
list_type::iterator m_iter; // will become apparent later
};
在 ControllerDetail 的构造函数中,我们会将实例添加到列表中。
ControllerDetail::ControllerDetail()
{
instances.push_back( this );
m_iter = instances.back(); // iterator that holds our object
}
在我们的析构函数中,我们将自己从列表中删除
ControllerDetail::~ControllerDetail()
{
instances.erase( m_iter );
}
显然,您可能必须在所有这些中处理线程安全问题,但您可以遍历列表并查看该类的所有当前实例。由于 ControllerPOD 是从 ControllerDetail 派生的,所以在构造它时也会被添加。
如果你只想添加特定的子类,你可以在ControllerDetail的构造函数中使用某种标志来决定是否添加自己。
一个类通常最好不知道派生自它的类。
现在,如果 ControllerPOD 不是真正的 ControllerDetail 类型,那么您的 ControllerDetail 将有一个 ControllerPOD* 列表,而您的 ControllerPOD 构造函数将添加自己并从列表中删除自己,您必须理清您的“访问权限”允许它这样做,但原理是一样的。
如果您的 ControllerPOD 被传递了一个“父”对象,它是一个 ControllerDetail,那么父对象会将列表作为成员,而您的 ControllerPOD 将添加自己并从父列表中删除自己。这假设父母比孩子长寿。
如果我们看到你真正想要做什么,我们可以更清楚地了解你的类设计。