Ash*_*ley 1 c++ pointers sdl smart-pointers c++11
我正在使用SDL2和C++制作基本游戏.我一直在慢慢改变我对原始指针的使用,以更安全的智能指针.
该_window变量是一个私有类成员:
private:
std::shared_ptr<SDL_Window> _window;
Run Code Online (Sandbox Code Playgroud)
以下代码有效:
_window = std::shared_ptr<SDL_Window>(SDL_CreateWindow(
"Game",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE
));
Run Code Online (Sandbox Code Playgroud)
以下代码不起作用:
_window = std::make_shared<SDL_Window>(SDL_CreateWindow(
"Game",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE
));
Run Code Online (Sandbox Code Playgroud)
抛出以下错误:
C:\...\include\type_traits(984): error C2027: use of undefined type 'SDL_Window'
Run Code Online (Sandbox Code Playgroud)
这非常令人困惑,因为它type_traits是标准库的一部分.因此,我不确定错误来源的位置,但在此处包含我的整个项目是不可行的.
什么可能导致抛出这样的错误,只需std::shared_ptr改为std::make_shared?
首先要解决你的问题:make_shared只有在获得资源的情况下才有帮助new,在这种情况下它不是.您必须使用正常shared_pointer构造函数和返回的资源SDL_CreateWindow.然而,这不是完整的故事,您还必须传入知道如何调用SDL_DestroyWindow以释放资源的删除器.
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |