我考虑过使用类似下面的东西,这样我就不必记得在方法末尾显式调用破坏函数:
#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++ - 这个用于 SDL 类型的智能指针包装器安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192436/