【发布时间】:2020-06-24 21:55:48
【问题描述】:
假设在 A 类中,我有一个指向向量的指针,其中包含指向 B 类的指针
Class A {
....
std::vector<B *>* table;
....
}
Class B {
int var1;
int var2;
B (const int _var1, const int _var2){
var1 = _var1;
var2 = _var2;
}
}
如何在 A 类的析构函数中删除表?
我试过了
~A()
{
for (int i = 0; i < table->size(); i++)
{
delete (*table)[i];
}
delete[] table;
}
但由于某种原因,它在析构函数中给出了段错误。
感谢您的帮助!
【问题讨论】:
-
您可能不尊重rule of 3/5/0,但我们无法判断,因为您没有提供minimal reproducible example。请注意,几乎没有理由拥有指向向量的指针(指向向量的指针需要确保获得
deleted)。你可能只想要std::vector<B> table;。过度使用指针是 c++ 中的一个常见错误。 -
为什么
A首先存储一个指向向量的指针?我认为您应该摆脱示例中的所有指针。 -
首先确保没有创建指向指针向量的指针。
-
我可以看到指向指针的问题,让我看看我是否可以简化该实现
-
@BlueXhusky 的经验法则 - 使用
new分配的内存必须使用delete释放,使用new[]分配的内存必须使用delete[]释放。不要混合它们。更好的经验法则 - 在 C++11 及更高版本中,根本不要手动使用new/delete,而是使用智能指针(std::unique_ptr和std::shared_ptr)并让它们处理所有的释放你。
标签: c++ pointers destructor