gpt4 book ai didi

c++ - wxWidgets 中的引用计数,在这个简单的例子中它是如何工作的?

转载 作者:行者123 更新时间:2023-11-28 08:25:34 26 4
gpt4 key购买 nike

我的程序崩溃了,我很难弄明白为什么会崩溃。主要问题是 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 counting works!");
}

崩溃的行是 t->IsOK()。引用计数不应该阻止实际对象被删除,所以我的 t ptr 仍然指向有效的东西吗?

最佳答案

让我解释一下发生了什么:

  1. 您创建一个指向您已经在某处创建的 wxImage 的指针。
  2. 然后您将其删除。
  3. 然后您尝试取消引用已删除的指针并在生成的对象上调用“IsOk()”,由于上一步,该对象不再存在。

第 2 步可能删除了对象,也可能没有删除,但它可能也删除了引用。根据 wx 如何实现引用计数,以及您如何管理引用,wxImage 对象在例程开始时的引用计数可能为 1 - 因此,wxDELETE 会将引用计数减少为零,从而删除对象好吧。

如果您按照自己的方式使用指针,wx 无法使用引用计数自动管理您的对象。也许您想使用复制构造函数,并停止使用手动内存处理? C++ 具有 RAII 技术 - 使用它。

最后,请问为什么m_default_image是一个指针?一直使用原始指针只是让自己的生活变得艰难。

关于c++ - wxWidgets 中的引用计数,在这个简单的例子中它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4180616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com