如何调用销毁功能?

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对象时,参数化构造函数被调用,之后立即调用析构函数?

gud*_*dok 6

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