gpt4 book ai didi

sdl - 不能在析构函数中使用 SDL_GL_DeleteContext

转载 作者:行者123 更新时间:2023-12-04 21:25:33 26 4
gpt4 key购买 nike

我在 D 中创建一个 SDL-OpenGL 应用程序。我正在使用废弃的 SDL 绑定(bind)来完成此操作。

当我运行完我的应用程序后,我想卸载 SDL。为此,我运行以下函数:

public ~this() {
SDL_GL_DeleteContext(renderContext);
SDL_DestroyWindow(window);
}

但是出于某种原因,这会给我一个模糊的段错误(在 GDB 中没有痕迹)并返回 -11。我不能在析构函数中销毁 SDL,我什至必须在使用后销毁 SDL 吗?

我的构造函数:

window = SDL_CreateWindow("TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN_DESKTOP);
if(window == null) {
string error = to!string(SDL_GetError());
throw new Exception(error);
}

renderContext = SDL_GL_CreateContext(window);
if(renderContext == null) {
string error = to!string(SDL_GetError());
throw new Exception(error);
}

最佳答案

类析构函数可以在与创建类的线程不同的线程中运行。发生崩溃的原因可能是 OpenGL 或 SDL 可能无法正确处理来自不同线程的清理。

堆分配(GC 管理)对象的析构函数不是执行清理的好方法,因为不能保证它们的调用。相反,将代码移至清理函数,或使用确定性方法来完成对象( reference counting 或手动内存管理)。

关于sdl - 不能在析构函数中使用 SDL_GL_DeleteContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22795144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com