我有一个名为ClassA
的类。这个ClassA
持有一个指向动态分配的ClassB
类对象的指针向量。ClassA
的析构函数如下:
ClassA::~ClassA() {
for (vector<ClassB*>::iterator i = m_vActiveB.begin(), e = m_vActiveB.end(); i != e; ) {
vector<ClassB*>::iterator tmp(i++);
delete *tmp;
m_vActiveB.erase(tmp);
}
}
在
ClassC
中,我有一个 ClassA
对象的向量。目前的情况是:如果我的 ClassC
向量中没有任何 ClassA
对象,则一切都正常。但如果我有对象,并在 ClassC
中调用 .erase(),那么会抛出异常。通过日志记录,我已经确定 ClassA
析构函数被调用了(因为我的理解是 .erase()
销毁每个向量成员时应该这样做),但循环开始时就会抛出异常。请问有人知道可能是什么原因导致这种情况吗?谢谢!
shared_ptr
和unique_ptr
,它们会是你的好朋友。这样做甚至不需要遍历向量销毁每个成员。 - Massa