我已经编写 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
语句来分配按钮时,按钮的内存是在空闲存储区(堆)中分配的。在第二条语句中,内存是在堆栈上分配的。
您宁愿在空闲存储中分配内存而不是在堆栈中分配内存的原因有两个。
- 堆栈大小有限,如果超出堆栈预算,您的程序将因堆栈溢出而崩溃。可以在空闲存储区分配更多内存,如果内存分配失败,通常会抛出
bad_alloc
异常。 - 堆栈上的分配是严格的后进先出 (LIFO),这意味着您的按钮不能存在的时间超过分配内存的代码块(
{...}
之间的内容) .在空闲存储区中分配内存时,作为程序员的您可以完全控制内存保持有效的时间(尽管粗心会导致内存泄漏)
在您的情况下,如果按钮只需要在调用函数期间存在,您可能可以在堆栈上分配按钮;如果按钮需要更长时间有效,请坚持免费商店
关于c++ - 我什么时候在 Qt 中使用指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18745839/