新手提问:关于析构函数和构造函数问题

sw98 2004-12-27 05:08:19
#include <iostream.h>
class b
{
int x,y;
public:
b(){x=y=0;cout<< "constructor1"<<endl;}
b(int i) {x=i;y=0;cout<<"constructor2"<<endl;}
b(int i,int j) {x=i;y=j;cout<<"constructor3"<<endl;}
~b(){cout<<"destructor"<<endl;}
void print()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
b *ptr;
ptr=new b[3];
ptr[0]=b();
ptr[1]=b(5);
ptr[2]=b(2,3);
for (int i=0;i<3;i++)
ptr[i].print();
delete[] ptr;
}
为什么显示结果为
constructor1
constructor1
constructor1
constructor1
destructor
constructor2
destructor
constructor3
destructor
x=0,y=0
xd=5,y=0
x=2,y=3
destructor
destructor
destructor
...全文
131 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
macrod 2004-12-27
  • 打赏
  • 举报
回复
ptr[0]=b();
ptr[1]=b(5);
ptr[2]=b(2,3);
等号右边的都是临时对象。
sw98 2004-12-27
  • 打赏
  • 举报
回复
为什么会产生临时对象呀,他还没起作用就调用析构函数了
qhgary 2004-12-27
  • 打赏
  • 举报
回复
ptr=new b[3]; 导致b()3次调用,所以出现3行连续constructor1
ptr[0]=b();
ptr[1]=b(5);
ptr[2]=b(2,3);
的意思是先构造一个b的临时对象,然后把这个对象再赋值给ptr[i]。注意,你这个ptr[0],ptr[1],ptr[2]不是指针,分别代表3个对象。在赋值结束之后,临时对象会被析够,所以会有destructor的调用。


for (int i=0;i<3;i++)
ptr[i].print(); 对应从x=0,y=0到x=2,y=3那几行
delete[] ptr; 对应那3个destructor

macrod 2004-12-27
  • 打赏
  • 举报
回复
我也是个低手,但我认为我足以回答你的问题而不需要高手了,因为高手肯定懒得答这个题。

constructor1 //new b[3] 调用无参数构造函数
constructor1 //同上
constructor1 //同上
constructor1 //ptr[0]=b() 调用无参数构造函数
destructor //析构 b() 产生的临时对象
constructor2 //ptr[1]=b(5) 调用单参数构造函数
destructor //析构 b(5) 产生的临时对象
constructor3 //ptr[2]=b(2,3) 调用二参数构造函数
destructor //析构 b(2,3) 产生的临时对象
x=0,y=0 //
x=5,y=0 //
x=2,y=3 //输出每个对象
destructor //b[2] 的析构函数
destructor //b[1] 的析构函数
destructor //b[0] 的析构函数
chunhai12 2004-12-27
  • 打赏
  • 举报
回复
ptr=new b[3];
为ptr[3]分配内存,同时调用b()
yuanye2008 2004-12-27
  • 打赏
  • 举报
回复
问题在哪?
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

65,210

社区成员

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

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