我正在尝试将结构存储在向量中。 Struct需要为给定大小的char *动态分配内存。但是,一旦我将结构添加到向量中,它的析构函数就会被调用,好像我失去了指向它的指针一样。
为了示例,我做了这个小演示。
#include "stdafx.h"
#include <iostream>
#include <vector>
struct Classroom
{
char* chairs;
Classroom() {} // default constructor
Classroom(size_t size)
{
std::cout << "Creating " << size << " chairs in a classroom" << std::endl;
chairs = new char[size];
}
~Classroom()
{
std::cout << "Destroyng chairs in a classroom" << std::endl;
delete[] chairs;
}
};
std::vector<Classroom> m_classrooms;
int main()
{
m_classrooms.push_back(Classroom(29));
//m_classrooms.push_back(Classroom(30));
//m_classrooms.push_back(Classroom(30));
system("Pause");
return 0;
}
输出为
Creating 29 chairs in a classroom
Destroyng chairs in a classroom
Press any key to continue . . .
Destroyng chairs in a classroom
是的,似乎析构函数被调用了两次!一次添加到向量,第二次在程序完成其执行时。
当我尝试使用类而不是结构时,发生了完全相同的事情。
有人可以解释为什么会发生这种情况,以及正确完成我的任务的可能方法是什么?
@ LPVOID
使用emplace_back(..)在适当位置创建对象可以帮助您避免此处遇到的double free or corruption
错误。
m_classrooms.emplace_back(29)
但是,最好始终遵循3/5/0的规则,以不以悬空指针结尾。