有关C++类的初始化列表问题

jeanszu 2009-10-22 03:34:58
class A
{
public:
A()
{
printf("A ");
}
~A()
{
printf("~A ");
}
};

class B
{
public:
B(A &a):_a(a)
{
printf("B ");
}
~B()
{
printf("~B ");
}
private:
A _a;
};

int main()
{
A a;
B b(a);
return 0;
}

输出选项:1、A A B ~B ~A ~A
2、A B ~B ~A ~A
当把B得构造函数改为:
B(A &a)
{
printf("B ");
_a = a;
}
又是选哪个答案呢?为什么呢?请各位大侠不胜赐教!!!
...全文
108 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
olncy 2009-10-22
  • 打赏
  • 举报
回复
在初始化列表中_a(a)调用的是A类的拷贝构造函数,因为A类没显式给出编译器帮你生成了一个
_a = a是会直接调用构造函数生成对象

在A类加入如下语句就可以看到调用拷贝构造函数

A(A& a)
{
printf("copyA ");
}
wanghao111 2009-10-22
  • 打赏
  • 举报
回复
改之前2、A B ~B ~A ~A
首先创建A的对象a,执行A的构造函数,输出A,接着创建B的对象,执行B的构造函数,输出B,先构造的后析构,所以先析构b,输出~B,b中有A的对象所以输出了两个~A
改之后1、A A B ~B ~A ~A
首先创建A的对象a,执行A的构造函数,输出A,接着创建B的对象,_a = a;又一次输出了A,后边的都一样了

64,635

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧