Почему вызывается деструктор?

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()

с достаточным количеством элементов — при этом проблема должна исчезнуть.

Вот, сравните два кода и результаты их выполнения:

https://ideone.com/un0X9A и https://ideone.com/DXJAHU

→ Ссылка