C Py 2021-07-06 22:24 采纳率: 100%
浏览 18
已采纳

求解析构顺序怎么不是先构造后析构

#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;
}

img

  • 写回答

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应用,多线程