C++ std::unique_ptr是否会干扰某些sf::RenderWindow函数?

C++ std::unique_ptr是否会干扰某些sf::RenderWindow函数?,c++,pointers,sfml,smart-pointers,unique-ptr,C++,Pointers,Sfml,Smart Pointers,Unique Ptr,sf::RenderWindow::getPosition在创建窗口的同一作用域中调用时,总是返回0,而不是正确的位置 下面是重现问题的示例代码: #include <iostream> #include <memory> #include <SFML/Graphics.hpp> int main() { std::unique_ptr<sf::RenderWindow> window_; window_ = std::unique_p

sf::RenderWindow::getPosition在创建窗口的同一作用域中调用时,总是返回0,而不是正确的位置

下面是重现问题的示例代码:

#include <iostream>
#include <memory>
#include <SFML/Graphics.hpp>

int main() {
  std::unique_ptr<sf::RenderWindow> window_;

  window_ = std::unique_ptr<sf::RenderWindow>(
    new sf::RenderWindow(sf::VideoMode(800, 600), "asd", sf::Style::Default)
  );
  window_->setFramerateLimit(30);
  window_->setVerticalSyncEnabled(false);

  while (window_->isOpen()) {
    sf::Event evt;
    while (window_->pollEvent(evt)) {
      if (evt.type == sf::Event::Closed) { window_->close(); }
    }
    window_->clear();
    window_->display();
  }

  const sf::Vector2i wpos = window_->getPosition();
  std::cout << "window position: " << wpos.x << "/" << wpos.y <<std::endl;

  return 0;
}
问题是:例如,我有一个类主菜单,我向它传递一个带有window.get的sf::RenderWindow*

当我从主菜单调用window->getPosition时,它会报告正确的位置,因此getPosition本身没有故障。只有当我在同一个范围内调用它时才是错误的


顺便说一下,我使用的是SFML2.3.1,当窗口打开时,在循环后打印窗口位置。这意味着窗口已关闭,即调用getPosition时窗口不存在。因此,不正确报告窗口位置也就不足为奇了,因为窗口已经永久关闭,因此它没有位置。

当窗口打开时,在循环打开后打印窗口位置。这意味着窗口已关闭,即调用getPosition时窗口不存在。因此,不正确报告窗口位置也就不足为奇了,因为窗口已经被永久关闭,所以它没有位置。

您应该构造唯一的\u ptr并同时初始化它:唯一的\u ptr窗口\u新的sf::RenderWindowsf::VideoMode800,600,asd,sf::Style::Default;。我知道,但这只是一个示例代码。在我的真实游戏中,unique_ptr是一个类成员变量,我以后构造窗口。顺便说一句,不需要有新的RenderWindow。你应该构造unique_ptr并同时初始化它:unique_ptr window_new sf::RenderWindowsf::VideoMode800,600,asd,sf::Style::Default;。我知道,但这只是一个示例代码。在我的真实游戏中,unique_ptr是一个类成员变量,我稍后构造窗口。顺便说一句,不需要新的RenderWindow。