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 如何在unity场景里做到通过按钮实现模型替换
  • ¥15 uniapp的websocket和c++的websocket服务器通讯 发送的数据和接受的数据表现形式不一样
  • ¥15 pyspark配置中的错误
  • ¥15 html word表格
  • ¥15 kali安装包如何解决,请给明确方案和步骤
  • ¥15 DEA软件进行企业创新效率的计算
  • ¥15 树莓派驱动42步进电机
  • ¥20 bevfusion mit可视化遇到的问题
  • ¥15 如何获得《人工智能工程技术人员》认证?
  • ¥100 悬赏破解EFS加密,速度