编辑:原来,无论我是否使用矢量这发生。它与具有自动销毁的函数的局部对象有关,尽管我试图显式调用析构函数。析构函数调用两次
我想弄清楚为什么我的对象显然被删除两次。我正在试验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'产生**未定义的行为**,因为它无效。之后你没有任何保证。 –