在 C++ 中,如何删除指向指针向量的指针?
How do you delete a pointer to a vector of pointers in c++?
假设在 class A 中,我有一个指向向量的指针,其中包含指向 class B
的指针
Class A {
....
std::vector<B *>* table;
....
}
Class B {
int var1;
int var2;
B (const int _var1, const int _var2){
var1 = _var1;
var2 = _var2;
}
}
如何在其析构函数中删除 class A 中的 table?
我试过了
~A()
{
for (int i = 0; i < table->size(); i++)
{
delete (*table)[i];
}
delete[] table;
}
但由于某种原因它在析构函数中给出了段错误。
感谢您的帮助!
由于析构函数中的 delete[] table
语句,您遇到了分段错误。
仅将 delete[] table;
替换为 delete table;
。
你的段错误是由这一行引起的:
delete[] table;
告诉编译器你想删除一个数组。 table
不是一个数组,尽管它可能像它一样,它是指向堆上的 单个 对象并调用 delete[]
(而不是 delete
) 因此导致未定义的行为。
根据经验,永远不要使用裸指针。如果您确实使用裸指针,请始终对 delete
使用与 new
.
相同的形式
正如评论中所指出的,在现代 C++ 中,你应该 永远不会 有一个装满裸指针的容器(裸指针是不由使用 RAII 的包装对象管理的指针) .
因此,您应该在矢量中使用 std::unique_ptr<B>
或 std::shared_ptr<B>
之类的东西代替 B*
。您也不应该有一个 std::vector
指针,而应该将向量复制或移动(如果复制很昂贵)到位。使用智能指针而不是裸指针,希望 不会再发生这种情况 :p.
假设在 class A 中,我有一个指向向量的指针,其中包含指向 class B
的指针Class A {
....
std::vector<B *>* table;
....
}
Class B {
int var1;
int var2;
B (const int _var1, const int _var2){
var1 = _var1;
var2 = _var2;
}
}
如何在其析构函数中删除 class A 中的 table?
我试过了
~A()
{
for (int i = 0; i < table->size(); i++)
{
delete (*table)[i];
}
delete[] table;
}
但由于某种原因它在析构函数中给出了段错误。
感谢您的帮助!
由于析构函数中的 delete[] table
语句,您遇到了分段错误。
仅将 delete[] table;
替换为 delete table;
。
你的段错误是由这一行引起的:
delete[] table;
告诉编译器你想删除一个数组。 table
不是一个数组,尽管它可能像它一样,它是指向堆上的 单个 对象并调用 delete[]
(而不是 delete
) 因此导致未定义的行为。
根据经验,永远不要使用裸指针。如果您确实使用裸指针,请始终对 delete
使用与 new
.
正如评论中所指出的,在现代 C++ 中,你应该 永远不会 有一个装满裸指针的容器(裸指针是不由使用 RAII 的包装对象管理的指针) .
因此,您应该在矢量中使用 std::unique_ptr<B>
或 std::shared_ptr<B>
之类的东西代替 B*
。您也不应该有一个 std::vector
指针,而应该将向量复制或移动(如果复制很昂贵)到位。使用智能指针而不是裸指针,希望 不会再发生这种情况 :p.