friend 们,我对所有这些编程谈话都是陌生的。到目前为止,通过谷歌搜索很容易找到答案,但在这里我很难表达我想问的问题,让我试试:删除 vector 在释放内存之前调用析构函数,对吧?现在,如果结构 vector 被破坏,它会如何 react ?没有为这些东西定义析构函数,但是假设如果一个结构被“析构”,它的每个成员的析构函数也会被调用是否正确?
举个例子:
#include <string>
#include <vector>
struct ding_t {
std::string dang;
} foo;
strung boom_t {
vector <ding_t> chuck;
} bar;
int main () {
vector <boom_t> tom;
tom.resize(10);
tom[4].chuck.resize(5);
tom[4].chuck[3].dang = "jerry";
tom.erase();
return 0;
}
在这种情况下,将由
分配的内存tom[4].chuck.resize(5);
也被释放了?对不起我的词汇量,但此刻我正试图从指针转向更复杂的 cpp 语言等价物。我希望我明白我的意思。提前谢谢大家,如果有人问过这个问题,请重定向我,正如我所说,我不知道如何界定这个问题。
最佳答案
是的,内存会自动释放。
当一个 vector 被析构时,它会调用它包含的所有元素的析构函数。您没有为 struct
定义析构函数,因此编译器将为您提供一个默认析构函数(什么都不做)。
但是,如果您的 vector 包含指向对象的指针,则您有责任在析构 vector 之前调用对象的析构函数(因为 vector 将调用指针的析构函数,而不是尖头对象),如果您以后没有其他方式访问它们的话。
关于c++ - vector::erase() 也删除结构的成员 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8666139/