編輯:原來,無論我是否使用矢量這發生。它與具有自動銷燬的函數的局部對象有關,儘管我試圖顯式調用析構函數。析構函數調用兩次
我想弄清楚爲什麼我的對象顯然被刪除兩次。我正在試驗std :: vector類,並想知道如何處理刪除對象。任何人都可以啓發我在這種情況下發生了什麼?
代碼:
#include<iostream>
#include<vector>
#include"DummyClass.h"
using namespace std;
void main(void){
//Make vector
vector<DummyClass> objVect1;
//Make objects to contain
DummyClass test;
//pass by value
objVect1.push_back(test); //makes a pass-by-value copy, I think?
//Delete the objects stored in the array
objVect1.clear(); // call dtor (vector's copy)
test.~DummyClass(); //call dtor on test
} //dtor called on test again?
控制檯輸出:
0033F9DB was constructed
0062C200 was destructed
0033F9DB was destructed
0033F9DB was destructed
的最後一個對象被銷燬兩次。我想弄清楚發生了什麼事。似乎沒有傳入構造函數的參數傳遞給vector。任何人都可以幫我解決這個問題嗎?謝謝!
類的頭是:
#pragma once
#include<iostream>
class DummyClass
{
public:
DummyClass();
~DummyClass();
};
類CPP是:
DummyClass::DummyClass()
{
std::cout << this << " was constructed" << std::endl;
}
DummyClass::~DummyClass()
{
std::cout << this << " was destructed"<< std::endl;
}
你確定載體與此有關嗎?你嘗試刪除它嗎? (修辭問題。) – juanchopanza
其實,我剛剛刪除它,你說得對,矢量不是問題的一部分。 –
'void main'產生**未定義的行爲**,因爲它無效。之後你沒有任何保證。 –