weixin_45943747 2020-11-07 21:30 采纳率: 0%
浏览 3

大佬们康康这个关于调用构造器和析构器注释的对吗?还有那个main函数里最后一次调用析构器是为什么啊

#include<iostream>
using namespace std;
class AAA
{
public:
	AAA()
	{
		cout << "这里是AAA的构造器" << endl;
	}
	~AAA()
	{
		cout << "这里是AAA的XI构器" << endl;
	}
protected:
private:
	int X;
};
class BBB : public AAA
{
};
class CCC : public BBB
{
};
CCC dosomething()
{
	CCC c;
	//调用了一次AAA的构造器->(构造c)
	return c;
	//调用了一次AAA的析构器->(删除c)
}
void dosomething(AAA a)
{
	BBB b;
	//调用了一次AAA的构造器->(构造b)
	//检查到函数要结束
	//调用了一次AAA的析构器->(删除b)
	//调用了一次AAA的析构器->(删除形参列表的a)
}
int main()
{
	AAA a;
	//调用了一次AAA的构造器->(构造a)
	BBB b;
	//调用了一次AAA的构造器->(构造b)
	CCC c;
	//调用了一次AAA的构造器->(构造c)
	dosomething(a);//见函数体(29行)
	c = dosomething();//见函数体(24行)
	return 0;
	//调用了四次AAA的析构器
		//第一次删除a
		//第二次删除b
		//第三次删除c
	//第四次调用main
}

 

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-24 21:16
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这段代码主要是展示了继承和构造函数、析构函数的调用顺序。当一个对象被创建时,首先会调用它的构造函数进行初始化,当对象不再被需要时(比如离开作用域、delete等),会调用析构函数进行清理。 在main函数中,依次创建了AAA对象a,BBB对象b,CCC对象c,然后调用了dosomething函数两次,并且将a传入第一个dosomething函数。 在dosomething函数中,首先创建了一个局部变量c,进入dosomething的作用域,然后退出作用域时,c会被销毁,调用析构函数。当dosomething函数的返回值赋值给c时,会调用赋值运算符,这段代码中没有显示重载赋值运算符,所以会调用默认浅拷贝赋值构造函数,然后会调用临时对象的析构函数。 在dosomething(AAA a)函数中,首先创建了BBB对象b,然后退出函数作用域时,b会被销毁,调用析构函数。同时,参数a也会被销毁,所以调用了a的析构函数。 综上所述,main函数结束时,会调用四次AAA的析构函数,分别是销毁a、b、c以及main函数本身。 示例:
    #include<iostream>
    using namespace std;
    class AAA {
    public:
        AAA() {
            cout << "这里是AAA的构造器" << endl;
        }
        ~AAA() {
            cout << "这里是AAA的析构器" << endl;
        }
    };
    class BBB : public AAA {};
    class CCC : public BBB {};
    CCC dosomething() {
        CCC c; 
        return c;
    }
    void dosomething(AAA a) { 
        BBB b; 
    }
    int main() {
        AAA a; 
        BBB b; 
        CCC c; 
        dosomething(a); 
        c = dosomething(); 
        return 0; 
    }
    

    代码的执行顺序和析构函数的调用顺序在运行时输出如下:

    这里是AAA的构造器
    这里是AAA的构造器
    这里是AAA的构造器
    这里是AAA的构造器
    这里是AAA的析构器
    这里是AAA的析构器
    这里是AAA的析构器
    这里是AAA的析构器
    
    评论

报告相同问题?

悬赏问题

  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题
  • ¥15 有没有人能解决下这个问题吗,本人不会编程
  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别