为什么没有释放这个全局堆对象?

Aru*_*man 0 c++ heap

我有这个代码:

class A {
    public:
            int x;
};

A *b;

void x() {
    A a;
    A *b = new A();
//  delete b; // works. free b.
}

int main() {
    x();
    delete b; //not. why ?
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么b只能在x()中释放?不是主()?我认为b是一个手动变量,而不是范围限制.用valgrind检查.

谢谢.:)

更新:

现在我记得.我可以使用全局b:

b = new A();

然后main()上的删除b可以正确删除全局b.

*facepalm*

Oli*_*rth 6

因为b内部x() 阴影的宣言是全球宣言; 它是一个单独的变量.因此,在您的代码中,b永远不会分配全局,因此您有内存泄漏.