gpt4 book ai didi

c++ - 无论您新建和删除多少次,指针都保证保持不变吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:17 25 4
gpt4 key购买 nike

这里在下面的例子中:

AguiWidget::setGlobalFont(segoe);
label->setFont(AguiWidget::getGlobalFont());
label->resizeToText();

delete segoe;
segoe = 0;
segoe = new AguiFont(std::string("test.ttf"),24);

我原以为标签会崩溃,因为标签的字体 = globalFont 是 = to segoe。

这会一直有效吗?

是否可以安全地假设,如果我重新创建 segoe,所有使用它的小部件都可以,或者使用 segoe 的小部件的字体会在某个时候受到影响吗?

谢谢

最佳答案

不,当您调用 new 并将指针分配给不同的对象时,指针现在可能指向一个完全不同的内存地址。旧内存地址现在无效(因为您对其调用了 delete),并且使用该地址的任何其他代码现在都在使用所谓的“悬挂指针”。

“悬挂指针”是指曾经有效但不再有效的内存地址的指针,因为它指向的对象已被释放。使用悬空指针会导致未定义的行为,并可能导致程序崩溃。

为了让这个程序正常工作,AguiWidget 对象应该创建它自己的指向对象的内部拷贝,这样它就不会依赖于它不拥有的内存地址.如果 AguiWidget 对象实际上确实这样做了,那么就不存在悬挂指针问题。但是,AguiWidget 对象的内部拷贝不会因为您更改外部 segoe 指针而受到影响。相反,您必须再次调用 AguiWidget::setGlobalFont

关于c++ - 无论您新建和删除多少次,指针都保证保持不变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269382/

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