Почему вызывается деструктор?
std::vector<ft_bitmap> bitmap;
for (uint32_t char_code = GLYPH_START; char_code < GLYPH_END; char_code++)
{
// Load text bitmap
GetBitmap(&bitmap_text, font, nullptr, ft_font, char_code);
if (bitmap_text.buffer)
{
bitmap.emplace_back(bitmap_text);
}
}
bitmap.emplace_back(bitmap_text); Во время исполнения вызывается деструктор при использовании вектора, из-за чего это может быть?
struct ft_bitmap
{
~ft_bitmap()
{
if (buffer)
{
delete buffer;
buffer = nullptr;
}
}
uint32_t width = 0;
uint32_t height = 0;
unsigned char pixel_mode = 0;
unsigned char* buffer = nullptr;
};
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Когда буфер в векторе расширяется, выделяется новая память и элементы переносятся на новое место, на старом месте они уничтожаются.
Попробуйте вызвать
bitmap.reserve()
с достаточным количеством элементов — при этом проблема должна исчезнуть.
Вот, сравните два кода и результаты их выполнения: