猿问

本人新手c++请指教!!

方法一: QTextEdit *textEdit = new QTextEdit;
QVBoxLayout *layout=new QVBoxLayout;
layout->addWidget(textEdit);
方法二: QTextEdit textEdit;
QVBoxLayout layout;
layout.addWidget(&textEdit);
求解这两种方法的区别,请问那种方法更适合省内存,为何方法二中要用“&”才能正确调用。

慕姐8265434
浏览 110回答 3
3回答

沧海一幻觉

1. 对象.方法 (对象是一个实例:QTextEdit textEdit);2. 对象->方法(对象是一个指针) ;3. layout->addWidget(textEdit); layout是个指针所以用 "-> " , 而addWidget( QTextEdit* ) 这个方法的形参是个指针。所以传进去的 textEdit 是(QTextEdit *textEdit = new QTextEdit;) 指针。所以是正确的。4. QVBoxLayout layout; layout.addWidget(&textEdit); layout 是个实例对象 所以用" . " ; 而addWidget的形参是指针,所以,传对象进去是不行的,加一个"&",是传这个对象的地址……总的来说就是:可以把指针传给指针,也可以把地址传给指针; 个人愚见,仅供参考

翻翻过去那场雪

先回答方法二中为何用(&);这就是函数最基本的传值还是传址的问题,想改变实参的值必须传地址。而且鉴于你方法一中如此使用layout->addWidget(textEdit),证明addWidget()函数的参数是指针,你肯定得取地址,否则不符合函数的参数表。这两种方法的区别,两种方法创建的对象所占内存是一样的。第一种自己new的对象占用的是内存中的“堆区”,第二种直接构造出来的对象占用的是内存中的“栈区”。 堆区很大,栈区比较小,如果你要创建非常多个对象当然在堆区好,但是你说单单创建一个对象,谈不上省不省内存之类的吧

MMTTMM

方法一,是新建一个类的指针,在运行中才在堆中new创建指针指向的对象,对象指针的成员操作要用->操作符,用完之后最好使用delete释放内存,防止由于指针的改变造成内存泄露;方法二,是在运行开始就已经创建好了对象,是在运行栈中创建的,你这里的addWidget()的参数类型明显是传入指针,所以要在textEdit加一个取地址符&
随时随地看视频慕课网APP
我要回答