EDIT: Оказывается, это происходит независимо от того, использую ли я вектор. Он связан с объектами, локальными для функции, имеющей автоматическое разрушение, несмотря на мою попытку явного вызова деструктора.Деструктор, вызываемый дважды
Я пытаюсь понять, почему мой объект, по-видимому, дважды удаляется. Я экспериментировал с классом 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
Последний объект разрушается в два раза. Я пытаюсь выяснить, что происходит. Кажется, что конструктор не вызывал аргумент copy-by-value, переданный в вектор. Может ли кто-нибудь помочь мне понять это? Благодаря!
Заголовок класс:
#pragma once
#include<iostream>
class DummyClass
{
public:
DummyClass();
~DummyClass();
};
Класс СРР является:
DummyClass::DummyClass()
{
std::cout << this << " was constructed" << std::endl;
}
DummyClass::~DummyClass()
{
std::cout << this << " was destructed"<< std::endl;
}
Вы уверены, что вектор имеет отношение к этому? Вы пытались его удалить? (Риторический вопрос.) – juanchopanza
Собственно, я просто удалил его, и вы правы, вектор не является частью проблемы. –
'void main' дает ** неопределенное поведение **, потому что это неверно. После этого у вас нет гарантий. –