我有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/

10-13 09:48