#include<iostream>
#include<string>
using namespace std;
class Human{
private:
int *age;
string *name;
public:
Human(string iname,int iage)
{
name=new string;
age=new int;
*name=iname;
*age=iage;
}
void display()
{
cout<<"Name "<<*name<<endl<<"Age "<<*age<<endl;
}
~Human(){
delete name;
delete age;
cout<<"Released all memories"<<endl;
}
};
int main()
{
Human *pallavi= new Human("pallavi",21);
pallavi->display();
delete pallavi;
pallavi->display();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编写了一个简单的程序,它创建了Human类的对象.指定析构函数以删除两个数据变量,即int age和string name.但是在调用析构函数("delete pallavi")并再次显示变量时,我收到的输出是:
姓名
21岁
当然,整个输出是这样的:
名字pallavi
年龄21
释放所有记忆
名字
年龄21.
我的问题是,析构函数不应该释放回忆吗?这是否意味着第二次显示对象(调用析构函数后),Name和age应显示垃圾值?为什么输出显示没有Name的值和21岁的年龄?
析构函数正在做它应该做的事情,但是pallavi 在你使用指针之后的行为delete是未定义的.
编译器可以执行任何操作,包括打印一些对象.它也可能吃你的猫.
大概你只是在课堂上使用指针成员作为练习."在现实中"这样做是毫无意义的int和std::string,是甚至是有害的:你的类的实例都不再平凡可复制.
| 归档时间: |
|
| 查看次数: |
847 次 |
| 最近记录: |