簡體   English   中英

如何調用銷毀功能?

[英]How destruction function is getting called?

#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對象的Array時,將調用參數化的構造函數,此后為何立即調用析構函數?

m =new Monster[3];

在這里創建了三個對象,為每個對象調用了默認構造函數。 這就是為什么您看到with out argument.消息的原因with out argument.

m[i] = i;

首先,使用Monster(int)構造函數在右側創建臨時Monster。 這就是為什么您看到消息Monster created.的原因Monster created. 接下來,調用賦值運算符。 接下來,您的臨時怪物被刪除。 這就是為什么您看到Monster destroyed.的原因Monster destroyed.

delete []m;

陣列中的三個怪物被摧毀。


為了更好地理解這種情況,建議您在所有郵件中添加this地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM