C++ wxWidgets中的引用计数,在这种简单的情况下它是如何工作的?
我的程序正在崩溃,我很难理解它为什么会崩溃。主要问题是wxwidgets文档说引用计数用于wxImage对象。这到底意味着什么?为什么这个代码会使它崩溃C++ wxWidgets中的引用计数,在这种简单的情况下它是如何工作的?,c++,wxwidgets,C++,Wxwidgets,我的程序正在崩溃,我很难理解它为什么会崩溃。主要问题是wxwidgets文档说引用计数用于wxImage对象。这到底意味着什么?为什么这个代码会使它崩溃 wxImage* t = m_default_image; //m_default_image is a pointer pointing to a valid wxImage object. wxDELETE(m_default_image); if(t->IsOk()) { wxLogMessage("reference c
wxImage* t = m_default_image; //m_default_image is a pointer pointing to a valid wxImage object.
wxDELETE(m_default_image);
if(t->IsOk())
{
wxLogMessage("reference counting works!");
}
崩溃的行是t->IsOK()。引用计数不应该阻止实际对象被删除,所以我的t ptr仍然指向有效的对象吗 让我解释一下发生了什么:
最后,我能问一下为什么m_default_image是指针吗?你一直在使用原始指针,这只会让你的生活变得艰难。为了补充Arafangion的答案(如果我有足够的代表点,我会发表评论),如果你阅读wxDELETE()的文档,你会发现它实际上说: 此函数使用运算符delete释放指针,并将其设置为NULL
C++指针与wxWidgets中引用计数的实现没有任何关系(我认为除了使用智能指针之外,它在其他任何地方都不会做),而且由于wxDELETE是与指针一起使用的,它也与引用计数完全无关,只不过它删除了一个对象,该对象可能已被引用计数,也可能未被引用计数,如果是,且对象引用计数大于1,则该对象实际上并未被删除,您的指针仍然无效。引用计数由
wxImage
对象内部使用,这意味着您可以在共享基础图像数据时廉价复制它们。它没有在wxapi中公开,而且肯定与wxImage
指针没有任何关系