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

Pointer to an object still points to the first 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

the last ptr->show() (statement before return statement) gives:

Sample 0

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