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为所有邮件添加地址.