指向对象的指针仍然指向第一个内存分配

时间:2016-10-12 02:37:33

标签: c++ class pointers object dynamic-memory-allocation

鉴于此代码:

#include <iostream>

using namespace std;

class samp
{
    int i;
public:
    samp(int i)
    {
        this->i=i;
    }

    void show()
    {
        cout << "Sample" <<" "<<i <<endl;
    }
};

int main()
{
    samp* ptr ;
    for(int i=0;i<10;i++)
    {
        ptr = new samp(i);
        ptr->show();
        delete ptr;
    }
    ptr->show();
    return 0;
}

ptr被定义为指向10个不同的samp类型对象。我知道删除它后,无法保证获得所需的输出。但是反复运行此程序会显示ptr仍然指向第一个对象,而最后一个ptr->show()return语句之前的语句)指向:

Sample 0

但是在循环的最后一次,ptr指向了第10个对象,所以它应该是最后ptr->show()return statement之前的语句)应该给出的:

Sample 9

为什么仍然提供Sample 0代替Sample 9

1 个答案:

答案 0 :(得分:0)

  

最后一个ptr-&gt; show()(返回语句之前的语句)给出:

     

样本0

这是因为您之前删除了指针,因此,正如您所说,无法保证获得所需的输出。你不应该使用最后一个ptr-&gt; show()。