其他分享
首页 > 其他分享> > c – SDL类型的智能指针包装是否安全?

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