#include <iostream>
using namespace std;
class Building;
class Goodgay
{
public:
Goodgay();
void visit();
~Goodgay();
public:
Building *building;//编译器给指针类型分配4个字节内存空间
//Building building;//未定义类,编译器不知道分配多少内存空间
};
class Building
{
//告诉编译器 goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容
friend void Goodgay::visit();
public:
Building();
~Building();
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
Goodgay::Goodgay()
{
cout << "Goodgay的构造函数调用" << endl;
building = new Building;
}
void Goodgay::visit()
{
cout << "好基友正在访问: " << building->m_SittingRoom << endl;
cout << "好基友正在访问: " << building->m_BedRoom << endl;
}
Goodgay::~Goodgay()
{
cout << "Goodgay的析构函数调用" << endl;
delete building;
}
Building::Building()
{
cout << "Building的构造函数调用" << endl;
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
Building::~Building()
{
cout << "Building的析构函数调用" << endl;
}
void test01()
{
Goodgay gg;
gg.visit();
}
int main()
{
test01();
system("pause");
return 0;
}
求解析构顺序怎么不是先构造后析构
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- qfl_sdu 2021-07-06 22:36关注
没明白你什么意思啊。析构函数是在对象销毁时自动调用的,构造函数是在创建对象时调用的。肯定是先调用构造函数生成对象,然后才会调用析构函数销毁。
Goodgay的构造函数中,调用Building类的构造函数,创建了Building实例building,所以会先调用Goodgay的构造函数,然后调用Building的构造函数。然后调用visit。
因为在Goodgay的析构函数中,没有对building这个指针进行处理(就是没有手动去销毁这个对象),所以这个对象只能在程序结束时由系统销毁。所以先打印Goodgay的析构函数,然后再打印Building的析构函数。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵