簡體   English   中英

我如何使用 function 返回成員數據的地址

[英]how do i return an address of a member data by using a function

我有我的引擎 class 包含 SDL_renderer* 並且我一直試圖通過使用 function getRenderer 來獲取它的地址,但它返回 null 實際上已經初始化了它。

class Engine
{
    public:
      SDL_Renderer* GetRenderer() { return m_renderer; } // null

      Engine() {}
      ~Engine() {}
private:
    bool m_Running = true;

   SDL_Window* m_window;
   SDL_Renderer* m_renderer;
 };


bool Engine::init()
{
   // initialize SDL
   if (SDL_Init(SDL_INIT_EVERYTHING) >= 0)
   {
      // if succeeded create our window
      m_window = SDL_CreateWindow("the title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
          SDL_WIDTH, SDL_HEIGHT, false);

      Engine* engine = new Engine();
      std::cout << engine->GetRenderer() << std::endl;
      if (m_window != nullptr)
      {
          std::cout << "entering this";
          m_renderer = SDL_CreateRenderer(m_window, -1, 0);
      }
      else
      {
          return false; // sdl could not initialize
      }
      std::cout << m_renderer<< std::endl; // this is not null
      std::cout << engine->GetRenderer()<<std::endl; // this is null

      textureManager = new TextureManager();
      textureManager->Load("tree", "Assets/tree.png"); // tree for tree texture
      m_Running = true;
      return true;
  }
 }

通常,當您在調試模式下運行 C++ 應用程序時,它會“清除”(設置為 0)所有未初始化的變量(不一定是 BTW)。 如果您嘗試在發布模式下編譯和運行,您可能會從 function 中獲得一個非零值。 這就是為什么總是建議並且必須在構造函數中初始化變量的原因。 更重要的是,如果你有一個成員原始指針,你應該非常小心,並考慮使用適當的構造函數和析構函數。

編輯

至少在您的情況下,我建議初始化變量並將它們設置為構造函數 initializer-list 中的nullptr ,然后直接從構造函數調用Init

也許,有一個更好的解決方案,但這可以被認為是一個快速修復。

編輯 2

值得一提的是下面的評論:不要忘記復制和移動構造函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM