因为我需要在不同类中指向SDL_Window的指针,所以我认为使用shared_ptr是一个好主意。
//happens in class A::foo()
//shared_Window_A is of type std::shared_ptr<SDL_Window>
shared_Window_A = std::make_shared<SDL_Window>(SDL_CreateWindow(..), SDL_DestroyWindow);
GLContext = SDL_GL_CreateContext(shared_Window_A.get()) //no compiler-error here
//Hand-over function of class A
std::shared_ptr<SDL_Window> GetWindow(){return shared_Window_A;);
//happens in class B::bar()
//shared_Window_B is of type std::shared_ptr<SDL_Window>
shared_Window_B = A.GetWindow();
SDL_GL_SwapWindow(shared_Window_B.get());
//gives "undefined reference to SDL_GL_SwapWindow"
SDL_GL_SwapWindow
和SDL_GL_CreateContext
都需要SDL_Window* window
。虽然我显然仍在学习shared_ptrs,但我并没有真正弄明白这里出了什么问题。我也用更丑陋的
(&(*shared_Window_B))
尝试过。总体而言,只要它们与同一个类中的SDL函数的指针位于同一个类中,这似乎是可行的:
.get()
似乎有效/不引起SDL_GL_CreateContext(shared_Window_A.get())
中的编译器错误。现在,我陷入困境,并希望保留shared_ptr而不是原始指针,因为它似乎对其他人有用。因此,我认为我在将shared_ptr从A类移交给B类时确实做错了。但是搜索returning a shared pointer证明我的尝试看起来并不算错。
那么,如何以与SDL2兼容的方式将一个shared_ptr从一个类移交给另一个?
最佳答案
您不能只传递指向std::make_shared
的指针。如果框架创建了对象,则必须避免使用std::make_shared
。也许这对您有用:
// shared_Window_A is of type std::shared_ptr<SDL_Window>
auto win = SDL_CreateWindow(..); // get the pointer from the framework
// now pass it in to the shared pointer to manage its lifetime:
shared_Window_A = std::shared_ptr<SDL_Window>(win, SDL_DestroyWindow);
或简洁地说:
shared_Window_A = std::shared_ptr<SDL_Window>(SDL_CreateWindow(..), SDL_DestroyWindow);
关于c++ - 返回shared_ptr并将其移交给SDL_GL_SwapWindow,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48527456/