#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 gdf格式的脑电数据如何处理matlab
- ¥20 重新写的代码替换了之后运行hbuliderx就这样了
- ¥100 监控抖音用户作品更新可以微信公众号提醒
- ¥15 UE5 如何可以不渲染HDRIBackdrop背景
- ¥70 2048小游戏毕设项目
- ¥20 mysql架构,按照姓名分表
- ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
- ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
- ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
- ¥15 linux驱动,linux应用,多线程