析构函数调用两次

谜团22134

编辑:事实证明,无论我是否使用矢量,都会发生这种情况。尽管我试图显式调用析构函数,但它与具有自动销毁功能的局部对象有关。

我试图弄清楚为什么我的对象显然被删除了两次。我正在尝试使用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;
}
user2357112支持Monica

最后一个对象被解构两次。

一次,当您明确地销毁它时,然后在函数结束时再次销毁,并且该函数本地的所有变量都将自动销毁。这是未定义的行为。

您几乎永远都不要自己调用析构函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章