c++中创建一个对象时 "."和"->"的区别

方法一:QTextEdit*textEdit=newQTextEdit;QVBoxLayout*layout=newQVBoxLayout;layout->addWidg... 方法一: QTextEdit *textEdit = new QTextEdit;
QVBoxLayout *layout=new QVBoxLayout;
layout->addWidget(textEdit);
方法二: QTextEdit textEdit;
QVBoxLayout layout;
layout.addWidget(&textEdit);
求解这两种方法的区别,请问那种方法更适合省内存,为何方法二中要用“&”才能正确调用。本人新手c++请指教!!
展开
 我来答
eyes700
2012-09-17
知道答主
回答量:7
采纳率:0%
帮助的人:3.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的形参是指针,所以,传对象进去是不行的,加一个"&",是传这个对象的地址……
总的来说就是:可以把指针传给指针,也可以把地址传给指针; 个人愚见,仅供参考
四季天地春满园L
2012-09-17 · TA获得超过496个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:52.5万
展开全部
先回答方法二中为何用(&);这就是函数最基本的传值还是传址的问题,想改变实参的值必须传地址。而且鉴于你方法一中如此使用layout->addWidget(textEdit),证明addWidget()函数的参数是指针,你肯定得取地址,否则不符合函数的参数表。

这两种方法的区别,两种方法创建的对象所占内存是一样的。第一种自己new的对象占用的是内存中的“堆区”,第二种直接构造出来的对象占用的是内存中的“栈区”。 堆区很大,栈区比较小,如果你要创建非常多个对象当然在堆区好,但是你说单单创建一个对象,谈不上省不省内存之类的吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qzx321
2012-09-17 · 超过25用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:69万
展开全部
方法一,是新建一个类的指针,在运行中才在堆中new创建指针指向的对象,对象指针的成员操作要用->操作符,用完之后最好使用delete释放内存,防止由于指针的改变造成内存泄露;
方法二,是在运行开始就已经创建好了对象,是在运行栈中创建的,你这里的addWidget()的参数类型明显是传入指针,所以要在textEdit加一个取地址符&
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式