【发布时间】:2016-06-07 23:05:25
【问题描述】:
编辑:事实证明,无论我是否使用向量,都会发生这种情况。尽管我尝试显式调用析构函数,但它与具有自动销毁功能的函数的本地对象有关。
我试图弄清楚为什么我的对象显然被删除了两次。我正在试验 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
最后一个对象被破坏了两次。我试图弄清楚发生了什么。似乎没有为传递给向量的按值复制参数调用构造函数。谁能帮我解决这个问题?谢谢!
类头是:
#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;
}
【问题讨论】:
-
你确定向量与此有关吗?您是否尝试删除它? (反问。)
-
其实我只是把它去掉了,你是对的,向量不是问题的一部分。
-
void main产生 未定义的行为,因为它是无效的。之后你就没有任何保证了。 -
它被称为 destructor 而不是 deconstructor
-
你为什么要自己调用析构函数???