[英]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.