将 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
。
我正在调用以下内容:
// 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
。