【发布时间】:2018-05-11 08:28:16
【问题描述】:
所以我基本上想这样做:
struct A {
A *children[10];
};
但是,当我这样做并创建一个析构函数时,例如:
virtual ~A() {
for (A *child: children) {
delete child;
}
}
我遇到了分段错误,但我不知道为什么。那么如何使用 STL 类完成在 A 中保存 A 的列表,这样我就不必担心 new/delete 了?我尝试了矢量并得到一个“不完整类型”的错误。
【问题讨论】:
-
你试过
std::vector<A*>吗?我不认为A曾经包含它自己?我只是在这里猜测,因为这里没有足够的信息可以做任何事情。考虑 editing 您的问题包含 minimal reproducible example,对于您的示例,它不应超过大约 20 行。 -
在
C++17你可以写struct A { std::vector<A> children; };没有这些不完整类型的担忧。这可能不会立即有帮助,但如果您的系统允许,升级到最新标准会有所帮助:) -
在此处显示的代码中,指针尚未初始化,因此每次删除都会产生未定义的行为。
-
您的第一个循环“按值”迭代。它不会改变
a.get()->children数组,这与您显然相信的相反。 -
回滚,你不能在得到答案后就问一个新问题来代替旧问题。问一个新问题。