【发布时间】:2016-10-25 12:56:18
【问题描述】:
#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;
}
我编写了一个简单的程序来创建类 Human 的对象。指定析构函数来删除两个数据变量,即 int age 和 string name。但是在调用析构函数(“delete pallavi”)并再次显示变量时,我收到的输出是:
姓名
21 岁
当然,整个输出是这样的:
Name pallavi
21 岁
释放所有记忆
名称
21 岁。
我的问题是,析构函数不应该释放记忆吗?这不应该意味着在第二次显示对象时(在调用析构函数之后),名称和年龄应该显示垃圾值吗?为什么输出没有显示 Name 和 21 的值?
【问题讨论】:
-
顺便说一句,您不需要为成员变量使用指针,只需将它们键入为
int和string。 -
如果您刚开始开发,并且使用的编译器不是那么旧,请查看smart pointer
标签: c++