gpt4 book ai didi

c++ - 重载问题 = 函数

转载 作者:行者123 更新时间:2023-11-28 03:54:09 25 4
gpt4 key购买 nike

这是我的问题。

我有一个名为 AguiFont 的类。它在内部有一个指向字体加载器设置的任何字体类型的指针。我重载了 = 运算符,以便用户永远不必管理它的内存。

除了一种情况外,它工作得很好。当我在其构造函数中为小部件设置字体时,出于某种原因,当我开始使用该字体时,我得到 0xfefefe,这是由于该指针处的内存已被释放。如果在 main 的一个函数中我创建了一些字体并且 ='d 它们就没问题了。当我调用 someWidget.setFont() 时也很好,但是调用 setFont();在构造函数中导致问题。

这里是重载的 = 运算符:

AguiFont& AguiFont::operator=(const AguiFont &tmp)
{
loader->destroyFont(nativeFontPtr);

nativeFontPtr = 0;
if(tmp.getFont())
this->nativeFontPtr = loader->loadFont(tmp.getPath().c_str(),tmp.getSize());

this->fontLineHeight = tmp.getLineHeight();
this->fontPath = tmp.getPath();
this->fontSize = tmp.getSize();

return *this;
}

这是一个小部件的构造函数:(我让它加载了一个应该确实成功的测试字体)

AguiWidget::AguiWidget(void)
{
location = AguiPoint(0,0);
size = AguiSize(0,0);

parentWidget = 0;
dockingStyle = DockingNone;
userData = 0;
opacity = 1.0f;
setFont(AguiFont(std::string("test.ttf"),24));
tintColor = AguiColor(1.0f,1.0f,1.0f,opacity);
fontColor = AguiColor(0.0f,0.0f,0.0f,1.0f);
isWidgetVisible = true;
isWidgetEnabled = true;
isWidgetFocusable = false;
isWidgetTabable = false;
clipChildren = true;
}

谢谢

最佳答案

我倾向于责怪抄袭者(你没有展示)。如果在创建临时字体时复制字体,第一个析构函数可能会调用 loader->destroyFont(nativeFontPtr);。如果复制构造函数没有复制 nativeFontPtr,一旦临时字体超出范围,这将破坏单个底层字体。

关于c++ - 重载问题 = 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4267526/

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