将 HWND 传递给方法并存储在 class 中

Passing HWND through to a method and storing in a class

我正在调用以下内容:

// hMainWindow is a correctly functioning window handle
app.GetMainWindowInfo().SetHndToWindow( hMainWindow );

这是我的 classes:

class App : public BaseClass
{
public:

    WindowInfo& GetMainWindowInfo();
    void SetMainWindowInfo( unique_ptr<WindowInfo> windowInfo );

private:

    WindowInfo mainWindowInfo;

};

class WindowInfo
{
public:

    HWND& GetHndToWindow() const;
    //void SetHndToWindow( HWND hndToWindow );

            // implementation on cpp file included here simply for example

            void WindowInfo::SetHndToWindow( HWND hndToWindow )
            {
                this->hndToWindow = hndToWindow;
            }

private:

    HWND hndToWindow; // Only for Windows OS

};

现在,当我尝试使用 Getter 方法时 GetHndToWindow,我得到了一个无法读取内存的未使用的备份。

我有什么地方可能出错的想法吗?

从上述问题继续,例如在应用程序 class 中,如果我在这一行检查调试器:

我的 graphicContext class 看起来像这样:

class IGraphicContext
{
    // Methods
public:

    virtual void Initialize() = 0;

private:

    // Properties

public:

    const WindowInfo& GetWindowInfo() const
    {
        return this->windowInfo;
    }

    void SetWindowInfo( WindowInfo& windowInfo )
    {
        this->windowInfo = windowInfo;
    }

protected:

    WindowInfo windowInfo;

};

class DXGraphicContext : public IGraphicContext, public BaseClass
{
    // Methods
public:

    DXGraphicContext();
    ~DXGraphicContext();

    virtual void Initialize() override;
   ...

您的 IGraphicContext::SetWindowInfo 方法对传入的 WindowInfo 进行 复制。如果稍后修改原件(例如通过调用 SetHndToWindow),这不会影响 IGraphicContext 持有的副本。

如果您真的想在两个单独的 类 之间共享这样的结构,您应该考虑将其保存在 std::shared_ptr