为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
慕姐8265434 2022-10-09 11:09:35
方法一: QTextEdit *textEdit = new QTextEdit;QVBoxLayout *layout=new QVBoxLayout;layout->addWidget(textEdit);方法二: QTextEdit textEdit;QVBoxLayout layout;layout.addWidget(&textEdit);求解这两种方法的区别,请问那种方法更适合省内存,为何方法二中要用“&”才能正确调用。
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

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

查看完整回答
反对 回复 2022-10-12
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

先回答方法二中为何用(&);这就是函数最基本的传值还是传址的问题,想改变实参的值必须传地址。而且鉴于你方法一中如此使用layout->addWidget(textEdit),证明addWidget()函数的参数是指针,你肯定得取地址,否则不符合函数的参数表。

这两种方法的区别,两种方法创建的对象所占内存是一样的。第一种自己new的对象占用的是内存中的“堆区”,第二种直接构造出来的对象占用的是内存中的“栈区”。 堆区很大,栈区比较小,如果你要创建非常多个对象当然在堆区好,但是你说单单创建一个对象,谈不上省不省内存之类的吧

查看完整回答
反对 回复 2022-10-12
?
MMTTMM

TA贡献1869条经验 获得超4个赞

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

查看完整回答
反对 回复 2022-10-12
  • 3 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信