我正在學習瞭解類構造函數和析構函數。 我已經寫了一個小控制檯代碼來添加一個類實例到一個向量中。所有的都很好,很花哨,但我不明白的是,向矢量中添加一個對象會觸發兩次析構函數。爲什麼會發生?Vector和push_back()行爲
如果我不添加任何對象,矢量不會自行觸發構造函數或析構函數,那麼它爲什麼會發生兩次?
任何人都可以解釋爲什麼會發生這種情況?
#include <cstdio>
#include <vector>
class Test
{
private:
int value;
public:
Test()
{
printf("\nClass constructor triggered.");
};
~Test()
{
printf("\nClass desctructor triggered.");
}
};
int main()
{
std::vector<Test> container;
container.push_back(Test());
return 0;
}
更新: 我增加了一些更多的信息類,使我得到更具體的輸出,但是現在我發現,每次除了矢量布展施工和析構函數調用增加。這些調用的數量是與矢量內的對象數量還是發生了什麼? 我有泄漏嗎?對不起,如果太愚蠢的問題。 下面是添加的代碼:
#include <cstdio>
#include <vector>
class Test
{
private:
int value;
public:
// Constructor
Test(int v=0)
{
value = v;
printf("\n\n%i", value);
printf("\nClass constructor triggered.");
};
// Copy-move constructor
Test(Test&&)
{
printf("\nClass move-constructor triggered.");
};
// Destructor
~Test()
{
value = 0;
printf("\nClass desctructor triggered.");
}
};
int main()
{
std::vector<Test> container;
container.push_back(Test(1));
container.push_back(Test(2));
container.push_back(Test(3));
container.push_back(Test(4));
printf("\n\nPushback complete!");
return 0;
}
因爲一個副本是與'push_back()'採取的。 –
由於矢量包含對象,而不是指向它們的指針,因此將在插入時複製對象,然後有兩個對象要銷燬。 –
@πάνταῥεῖ:答案去那裏↓↓↓↓↓我必須告訴你多少次 –