C ++构造全局变量

时间:2014-10-06 19:11:13

标签: c++ memory scope global-variables

我有一个c ++代码:

// includes, variables etc...
GraphStructure graphStructure;

void getInput() {
    graphStructure = GraphStructure(nodesCount, edgesCount);
    // HERE, the destructor is called!
    graphStructure.init(nodesCount, edgesCount);
    // Same code as constructor, but now its okay.
}

int main(int argc, char* argv[]) {
    getInput();
}

我想知道,为什么在构造之后直接调用对象的析构函数。在变量范围结束后调用析构函数,该变量应该在主函数结束之后。

1 个答案:

答案 0 :(得分:3)

GraphStructure(nodesCount, edgesCount)GraphStructure临时实例。因此,当评估包含它的完整表达式时,它的析构函数被调用(结尾是分号;)。

如果它是本地实例,它将受 getInput() 范围的约束,而不是main()。当编译器到达getInput()的末尾时(在结束大括号}之前),它的析构函数将被调用。并且当main完成执行时,将调用main中任何局部变量的析构函数。