【发布时间】:2014-05-15 11:11:38
【问题描述】:
我有一个名为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() 破坏了每个向量成员),但是当循环开始时抛出异常。
有谁知道这可能是什么原因造成的?谢谢!
【问题讨论】:
-
你为什么要持有指向动态分配对象的指针?
-
我不应该这样做吗? :S
-
@user1014679 好吧,
shared_ptr和unique_ptr是你的朋友,如果你使用其中之一,你甚至不必迭代向量来破坏每个成员。 -
@user1014679,没有。请参阅here。
标签: c++ exception pointers vector erase