动态创建对象数组
答案:2 悬赏:80
解决时间 2021-12-22 20:02
- 提问者网友:白柏唇蜜
- 2021-12-22 06:03
#include
class B
{int x;
public:
B(){x=0;cout<<"Constructor1"< B(int i){x=i;cout<<"Constructor2"< ~B(){cout<<"Destructor"< void print(){cout<<"x="<};
void main()
{B *ptr;
ptr=new B[2];
ptr[0]=B();
ptr[1]=B(5);
for(int i=0;i<2;i++)
ptr[i].print();
delete []ptr;
}
为什么输出的结果是:
Constructor1
Constructor1
Constructor1
Destructor
Constructor2
Destructor
x=0
x=5
Destructor
Destructor
此答案的第三行至第四行我不知道是怎么得来的,难道是先new出来一个空间,然后在自动把原来的空间给delete掉?
最佳答案
- 二级知识专家网友:如果这是命
- 2021-12-22 07:41
ptr[0]=B(); 这条语句是赋值操作,在赋值操作函数中它会先初始化一个临时对象,然后把这个临时对象赋值给ptr[0],然后把这个临时对象析构掉了。
全部回答
- 1楼网友:不羁的心
- 2021-12-22 08:21
以下是运行结果:
defaultconstructorcalled.
defaultconstructorcalled.
deleting...
destructorcalled.
destructorcalled.
你的结果已经很明白了啊!
1.都调用了默认构造函数,因为你创建2个对象时都未给参数;
2.执行这两句时,对象空间已经分配好了,不调用构造函数了.只是执行附值的任务;
3.因为你是用new分配的动态数组空间,数组空间的释放就必须写[],其实在这儿是省略了[2]中的2的;
4.delete[]ptr;对应的是deleting...;后面那2句是析构函数根据你的构造函数自动调用的,作用是释放不同构造函数申请的动态内存;
我要举报
大家都在看
推荐资讯