按照书籍,第一个cout行应该打印出存储char变量b的位置的地址,这似乎也是int变量a的情况.但第一个cout语句打印出一个奇怪的'dh ^#',而第二个语句正确打印一个十六进制值'ox23fd68'.为什么会这样?
#include<iostream>
using namespace std;
int main()
{
char b='d';
int a=10;
char *c=new char[10];
c=&b;
int *e=&a;
cout<<"c: "<<c<<endl;
cout<<"e: "<<e;
}
Run Code Online (Sandbox Code Playgroud) #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岁的年龄?
c++ ×2