- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因为我需要一个指向不同类中的 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* 窗口
。
虽然我显然仍在学习 shared_ptrs,但我并没有真正理解这里出了什么问题。我还尝试了更丑陋的 (&(*shared_Window_B))
。
总的来说,只要它们在同一个类中,就可以使用 .get()
将指针移交给 SDL 函数:SDL_GL_CreateContext(shared_Window_A.get())
似乎有效/不会在 A::foo()
中引发编译器错误。
现在我被卡住了,想保留 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/
我做了一些性能测试并想出了这个: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for(U32 i=0;iprojection * usedV
因为我需要一个指向不同类中的 SDL_Window 的指针,所以我认为使用 shared_ptr 是个好主意。 //happens in class A::foo() //shared_Window_
我是一名优秀的程序员,十分优秀!