#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和字符串名称。但是在调用destructor(“delete pallavi”)并再次显示变量时,我收到的输出是:
名称
21岁
当然,整个输出是这样的:
名称pallavi
21岁
释放了所有的回忆
名称
年龄21.
我的问题是,析构函数不应该释放记忆吗?这是否不意味着在再次显示对象(调用析构函数之后)时,名称和年龄应该显示垃圾值?为什么输出中没有显示“名称”值和“21”的年龄值?
最佳答案
析构函数正在执行应做的事情,但是在您将pallavi
命名为之后,使用指针delete
的行为是不确定的。
编译器可以做任何事情,包括打印一些对象。它也可能会吃掉你的猫。
大概您只是在类里面使用指针成员作为练习。对于int
和std::string
而言,“实际上”这样做是毫无意义的,甚至是有害的:您的类实例不再是可复制的。
关于c++ - C++析构函数以释放内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37987406/