gpt4 book ai didi

c++ - 我什么时候在 Qt 中使用指针?

转载 作者:IT老高 更新时间:2023-10-28 22:13:23 24 4
gpt4 key购买 nike

我已经编写 Qt 有一段时间了,我想知道这两种情况有什么区别:

案例1:

标题:

QPushButton * button;

源文件:

button = new QPushButton(this);
button->setText("Button");
button->resize(100,100);

案例2:

标题:

QPushButton button;

来源:

button.setParent(this);
button.setText("Button");
button.resize(100,100);

两者都产生一个按钮,但我应该什么时候使用前者,什么时候使用后者?两者有什么区别?

最佳答案

第一种和第二种情况的区别在于,当你使用指针和new语句来分配按钮时,按钮的内存是在空闲存储区(堆)中分配的。在第二条语句中,内存是在堆栈上分配的。

您宁愿在空闲存储中分配内存而不是在堆栈中分配内存的原因有两个。

  1. 堆栈大小有限,如果超出堆栈预算,您的程序将因堆栈溢出而崩溃。可以在空闲存储区分配更多内存,如果内存分配失败,通常会抛出 bad_alloc 异常。
  2. 堆栈上的分配是严格的后进先出 (LIFO),这意味着您的按钮不能存在的时间超过分配内存的代码块({...} 之间的内容) .在空闲存储区中分配内存时,作为程序员的您可以完全控制内存保持有效的时间(尽管粗心会导致内存泄漏)

在您的情况下,如果按钮只需要在调用函数期间存在,您可能可以在堆栈上分配按钮;如果按钮需要更长时间有效,请坚持免费商店

关于c++ - 我什么时候在 Qt 中使用指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18745839/

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