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的形参是指针,所以,传对象进去是不行的,加一个"&",是传这个对象的地址……
总的来说就是:可以把指针传给指针,也可以把地址传给指针; 个人愚见,仅供参考
TA贡献2065条经验 获得超13个赞
先回答方法二中为何用(&);这就是函数最基本的传值还是传址的问题,想改变实参的值必须传地址。而且鉴于你方法一中如此使用layout->addWidget(textEdit),证明addWidget()函数的参数是指针,你肯定得取地址,否则不符合函数的参数表。
这两种方法的区别,两种方法创建的对象所占内存是一样的。第一种自己new的对象占用的是内存中的“堆区”,第二种直接构造出来的对象占用的是内存中的“栈区”。 堆区很大,栈区比较小,如果你要创建非常多个对象当然在堆区好,但是你说单单创建一个对象,谈不上省不省内存之类的吧
TA贡献1869条经验 获得超4个赞
方法一,是新建一个类的指针,在运行中才在堆中new创建指针指向的对象,对象指针的成员操作要用->操作符,用完之后最好使用delete释放内存,防止由于指针的改变造成内存泄露;
方法二,是在运行开始就已经创建好了对象,是在运行栈中创建的,你这里的addWidget()的参数类型明显是传入指针,所以要在textEdit加一个取地址符&
- 3 回答
- 0 关注
- 109 浏览
添加回答
举报