C ++:当指针本身发生变化时,如何更新对指针值的引用?

时间:2013-04-02 11:19:39

标签: c++ pointers reference

考虑以下计划:

include <iostream>

using namespace std;

int main()
{

    int *ptr = new int(10);
    int &ref = *ptr;

    cout << ref << endl << &ref << endl;

    delete ptr;
    ptr = new int(100);
    cout << ref << endl << &ref << endl;

    return 0;
}

输出:
    10个
    0x80010348
    100个
    0x80010348

此处ref变量是对ptr指向的内存位置的引用。但是,当删除ptr指针并分配新的内存位置时,ref现在应该引用未定义的内存位置,因为前一个不存在。但是当我运行这个程序时,我通过参考cygwin / linux上的g ++和VC ++ 2012 express来获取更新的值和地址。

但是,如果ptr 已删除,则ref不会更新,输出会显示旧值10和旧地址。这种行为是标准的还是特定于编译器的?如果是标准,那么为什么ref的更新取决于是否删除ptr

1 个答案:

答案 0 :(得分:2)

它只是内存分配器正常工作的方式。在您的代码中:

delete ptr;
ptr = new int(100);

删除一个int,然后立即要求换一个新{{1}}。运行时说&#34;好,有这个。它刚刚推出&#34;。

简单回收。