指向对象的指针仍然指向第一个内存分配
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().
鉴于此代码:
#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().