c – SDL类型的智能指针包装是否安全?
作者:互联网
我想过使用类似下面这样的东西,所以我不必记得在方法结束时显式调用驱逐舰函数:
#include <iostream>
#include <SDL2/SDL.h>
#include <memory>
int main()
{
SDL_Init(SDL_INIT_VIDEO);
std::unique_ptr<SDL_Window, decltype((SDL_DestroyWindow))>
win { SDL_CreateWindow("asdf", 100, 100, 640, 480, SDL_WINDOW_SHOWN),
SDL_DestroyWindow };
if (!win.get())
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_CreateWindow Error: %s",
SDL_GetError());
return 1;
}
SDL_Quit();
}
我不确定这是不是最好的方法.我担心这不会做我想做的事情,即使它看起来很简单.这种方法有什么微妙的错误吗?
解决方法:
介绍一个新的范围,你应该没问题:
int main()
{
SDL_Init(SDL_INIT_VIDEO);
{
std::unique_ptr<SDL_Window, decltype((SDL_DestroyWindow))>
win { SDL_CreateWindow("asdf", 100, 100, 640, 480, SDL_WINDOW_SHOWN),
SDL_DestroyWindow };
if (!win.get())
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_CreateWindow Error: %s",
SDL_GetError());
return 1;
}
} // win destroyed before SQL_Quit
SDL_Quit();
}
标签:c,c11,smart-pointers,sdl 来源: https://codeday.me/bug/20190824/1704732.html