Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / C++/variadic templates/std::tuple

C++/variadic templates/std::tuple

BowmanПостоялецwww9 авг. 201815:52#0
Собсна, сабж. Дан некий условный класс буфера(UniformBuffer), он реализует(по-крайней мере должен где-то там в задумках) SoA путь хранения данных. Внутри буфера std::tuple, который есть кортеж AlignedBuffer<какой-нибудь-тип>(раньше Uniform & Aligned были одним классом, но столкнувшись с нижеописанной проблемой я попробовал его разделить на два, не взлетело). Инициализируется кортеж в конструкторе как-то так
UniformBuffer(int64_t length)
    : data(impl::AlignedBuffer<DataTypes>(length)...)
{}
и вроде даже собирается, память внутри AlignedBuffer выделяется, только вот не освобождется в конце. В этом проблема. Если собрать тестовое приложение(код ниже), то вывод в консоль будет примерно таким
allocated block(i) 93824992337520
allocated block(f) 93824992341824
allocated block(f) 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
free invoked(f) for 93824992342016
... и так до бесконечности, пока сегфолт не выскочит.
То есть метод освобождения памяти вызывается дохреналион раз, и всё на одном блоке. Вопрос, что я делаю не так? gcc (Debian 7.3.0-27) 7.3.0
+ весь код
DelfigamerПостоялецwww9 авг. 201817:39#1
    static void free(DataType *mblock)
    {
        free(mblock);
    }
Угадай с одного раза, какой из free вызовется на этой строке.
BowmanПостоялецwww9 авг. 201820:32#2
Delfigamer
> Угадай с одного раза, какой из free вызовется на этой строке.
Чьорт, слона то я и не приметил ^_^ спасибо.

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр