我有MessagesViewer
框架,我想控制其唯一性,
这段代码:
MessagesViewer* m_pMsgViewer = NULL;
void Application::ShowMessagesViewer()
{
if (m_pMsgViewer == NULL)
{
m_pMsgViewer = new MessagesViewer(
wxGetApp().GetContainer()->GetAppData()->GetMessages()
);
}
else
{
m_pMsgViewer->FillPage(wxGetApp().GetContainer()->GetAppData()->GetMessages());
m_pMsgViewer->SetFocus();
}
}
但是,当我第一次调用它时,
m_pMsgViewer
开始引用内存中的有效数据。当我关闭MessagesViewer
框架时,它会自动销毁它,但是指针仍然指向旧地址,并且我无法控制从此客户端代码中销毁该框架。如何取消引用指向已破坏帧的指针?
最佳答案
@bogdan已经提出了一个好的解决方案,但是还有另一个甚至更自动的解决方案:将帧指针存储在wxWeakRef<>中。即保持与现在完全相同的代码,但将声明替换为
wxWeakRef<MessagesViewer> m_pMsgViewer;
销毁窗口后,弱引用将自动重置为
NULL
。关于c++ - 取消引用指向不再存在的框架的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30295903/