#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.
当我用值初始化 Monster 对象数组时,参数化的构造函数被调用,紧接着为什么调用析构函数?
最佳答案
m =new Monster[3];
这里创建了三个对象,为每个对象调用了默认构造函数。这就是为什么您会看到消息没有参数。
m[i] = i;
首先,使用 Monster(int)
构造函数在右侧创建临时 Monster。这就是您看到消息 Monster created.
的原因。接下来,调用赋值运算符。接下来,您的临时 Monster 被删除。这就是您看到 Monster destroyed.
的原因。
delete []m;
阵列中的三个怪物被摧毁。
为了更好地理解这种情况,我建议您将this
的地址添加到您的所有消息中。
关于c++ - 如何调用破坏函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36838380/