我有一个私人会员
std::list<MyClass*> myclass_list;
这是其他类的一部分。
当我关闭控制台应用程序时,将调用 OtherClass 的空析构函数。问题是,在析构函数调用期间 - OtherClass 中的某些方法想要迭代 myclass_list - 例如
for(std::list<MyClass*>::iterator it = myclass_list.begin(); it != myclass_list.end(); ++it) {
// do stuff
}
现在,即使 myclass_list 是空的(并且在其生命周期内从未为其分配/添加单个变量) - for 循环将至少迭代一次 - 基本上访问不存在的 MyClass 对象。
当我从 std::list 切换到 std::vector 时,这一切都消失了。
- 此处列表的 STL (VS2010) 有什么问题?我如何检查无效列表(!= 0 或 !vector 不起作用,没有重载运算符)。
- 我认为它适用于向量,因为它使用连续内存,因此循环永远不会被执行。
编辑:好的,我认为问题可能在于访问无效的 Otherclass 对象,该对象当前调用了析构函数。Otherclass 是一个全局对象。
工作流程 ~OtherClass -> 删除 someMemberObject -> ~someMemberObject -> otherclass->CheckMyClassList(someMemberObject) -> 崩溃