这段代码会导致运行时无限分配吗?

问题描述

struct trie_node
{
    trie_node() : is_leaf{true},children(26),c{' '} {};
    bool is_leaf{false};
    std::vector<trie_node> children;
    char c{' '};
};

int main(int argc,char const *argv[])
{
    trie_node t;
}

当我尝试编译上面的代码时,它编译正确。但是,在检查代码时,由于成员变量 childrentrie_node 的向量,因此分配似乎存在无限循环。因此,当创建 t 时,它将创建一个大小为 26 的向量 trie_node 对象,并且这 26 个元素中的每一个将依次创建另一个大小为 26 的向量 trie_node 对象和很快。我的理解正确吗?如果是这样,为什么编译器不为此给出警告或错误

解决方法

是的,你的理解是正确的。

为什么编译器不会为此给出警告或错误?

你的代码是语法正确的 C++ 代码,所以错误是不可能的。

要对此发出警告,编译器必须检测到问题。由于分配隐藏在几个抽象层中,因此很难设计和实现能够可靠地检测这种情况的算法。也不值得这样做,因为它会 1. 是非常罕见的情况 2. 无论如何都会在运行时立即检测到。