c++ - vector::erase() 也删除结构的成员 vector

标签 c++ vector struct

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/

相关文章:

c++ - boost 条件。我究竟做错了什么?

c++ - getline 跳过第一个输入字符 c++

c++ - (Visual C++) 制作游戏版本 Mastermind

c - 如何在c中正确分配和打印结构指针?

c++ - C++模板构造函数的问题

c++ - g++: 无法确定运行哪个汇编器

c++ - 通过将文本文件读入字符串/vector 来计算加权/未加权 GPA

c++ - MaxPairwiseProduct 程序的段错误(核心转储)运行时错误

c - 在 C 中,如何为我的结构分配空间?

go - 为什么我对数组中嵌套结构的更改会在进行更改的函数之外丢失?