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

标签 c++ qt pointers

我已经编写 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/

相关文章:

c++ - int(*a)的解释[3]

c++ - 有什么好的 C 或 C++ 库可以处理大型点云吗?

c++ - 防止 QDockWidget 自动调整大小行为

linux - QApplication 之后的清理

c++ - QNetworkAccessManager ssl 握手失败

c - 尝试取消引用动态分配的指针时出现段错误

c++ - 从第三方类实现虚函数

c++ - 如何使用 GMP 创建 float 组?

c++ - Qt - 将文件从一个目录复制到另一个

C++:只打印一个字符