use*_*465 1 c++ constructor destructor
#include<iostream>
using namespace std;
class Monster {
public:
Monster() {cout << "with out argument. \n";}
Monster(int sz) { cout << "Monster created.\n"; }
~Monster() { cout << "Monster destroyed.\n"; }
int GetSize() { return itsSize; }
void SetSize(int str) { itsSize = str; }
private:
int itsSize;
};
int main()
{
Monster *m;
m =new Monster[3];
for(int i = 0; i < 3; i++)
m[i] = i; // constructor with argument is getting called for each elements after which why destructor is getting called for each element.
delete []m;
return 0;
}
Output:
with out argument.
with out argument.
with out argument.
Monster created. // Monster constructor with argument is getting called.
Monster destroyed. // 1. Why this destructor is getting called after each call of constructor.
Monster created.
Monster destroyed. //2.
Monster created.
Monster destroyed. //3.
Monster destroyed.
Monster destroyed.
Monster destroyed.
Run Code Online (Sandbox Code Playgroud)
当我用值初始化Array of Monster对象时,参数化构造函数被调用,之后立即调用析构函数?
m =new Monster[3];
Run Code Online (Sandbox Code Playgroud)
这里创建了三个对象,为每个对象调用了默认构造函数.这就是你看到消息的原因with out argument.
m[i] = i;
Run Code Online (Sandbox Code Playgroud)
首先,使用Monster(int)构造函数在右侧创建临时Monster .这就是你看到消息的原因Monster created.Next,调用赋值运算符.接下来,删除您的临时怪物.这就是你看到的原因 Monster destroyed..
delete []m;
Run Code Online (Sandbox Code Playgroud)
数组中的三个怪物被摧毁.
为了更好地了解这种情况,我建议您this为所有邮件添加地址.
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |