#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 и имени строки. Но при вызове деструктора («удалить Pallavi»), и снова отображать переменные, выход я получаю это:
C++ Деструкторы для освобождения памяти
Имя
Возраст 21
Конечно, весь выход заключается в следующем:
Имя Pallavi
Возраст 21
Освобожденные все воспоминания
Имя
Возраст 21.
Мой вопрос: не должен ли деструктор выпускать воспоминания? Должно ли это не означать, что при отображении объекта второй раз (после вызова деструктора) имя и возраст должны отображать значения мусора? Почему вывод не показывает значения для имени и 21 для возраста?
Как в стороне, вам не нужно использовать указатели для ваших переменных-членов, просто введите их как 'int' и' string'. – Sean
, если вы только начинаете разработку и используете не такой старый компилятор, взгляните на [умный указатель] (http://stackoverflow.com/questions/106508/what-is-a-smart-pointer-and-when-should -i-use-one) – Garf365
Возможный дубликат [C++ delete - Удаляет мои объекты, но я все еще могу получить доступ к данным?] (http://stackoverflow.com/questions/1930459/c-delete-it-deletes-my -Объекты-но-я-могу-еще-доступ-данные) –