类对象和类指针深入分析与对比
1.前言
Student a; s.setName("A");//Studeng *b = new Student(); Student *b; b = new Student(); b->setName("B");類對象基本格式是:Student a;
在定義之后就已經(jīng)為a這個對象分配了內(nèi)存,且為內(nèi)存棧;
類指針基本格式是:Student *b = new Student();
在定義*b的時(shí)候并沒有分配內(nèi)存,只有執(zhí)行new后才會分配內(nèi)存,且為內(nèi)存堆。
2.類指針和類對象的對比分析
2.1 兩者的區(qū)別
| 類對象 | 類指針 | |
| 定義 | 利用構(gòu)造函數(shù)在內(nèi)存中分配一塊區(qū)域 (對類初始化,成員變量賦值) | 是個內(nèi)存地址值,指向內(nèi)存中 存放的類對象 |
| 使用 | 對象使用“.” 生存周期:由析構(gòu)函數(shù)負(fù)責(zé)清除 | 指針使用“->” 生存周期:需要用delete在相應(yīng) 的地方釋放分配的內(nèi)存塊 |
| 存儲 | 用的是內(nèi)存棧 是個局部的臨時(shí)變量 | 用的是內(nèi)存堆 永久變量,除非刪除它 |
| 多態(tài) | 不行 | 可以 |
| 訪問 | 直接訪問 | 間接訪問 |
2.2 兩者的聯(lián)系
在類的聲明尚未完成的情況下,可以聲明指向該類的指針,但是不可聲明該類的對象;
父類的指針可以指向子類的對象。
2.3 強(qiáng)大的指針與多態(tài)
通過前面可知:類指針是一個指向內(nèi)存中存放類對象的內(nèi)存地址值,那么這個指針可以指向多個不同的對象,這就是多態(tài);
拓展:指針與虛函數(shù)
要發(fā)揮虛函數(shù)的強(qiáng)大作用,必須使用指針來訪問對象。
當(dāng)類是有虛函數(shù)的基類,Func是它的一個虛函數(shù),則調(diào)用Func時(shí):
類對象:調(diào)用的是它自己的Func;
類指針:調(diào)用的是分配給它空間時(shí)那種類的Func。
2.4?什么情況使用類對象與類指針?
其實(shí)作用基本一樣 都是為了調(diào)用類的成員變量和成員函數(shù)用的;
當(dāng)你希望明確使用這個類的時(shí)候,最好使用對象;
如果你希望使用C++中的動態(tài)綁定,則最好使用指針或者引用,指針和引用用起來更靈活,容易實(shí)現(xiàn)多態(tài)等。
2.5?指針好處
第一,實(shí)現(xiàn)多態(tài)。
第二,在函數(shù)調(diào)用,傳指針參數(shù)。不管你的對象或結(jié)構(gòu)參數(shù)多么龐大,你用指針,傳過去的就是4個字節(jié)。如果用對象,參數(shù) ? 傳遞占用的資源就太大了。
總結(jié)
以上是生活随笔為你收集整理的类对象和类指针深入分析与对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 飞鸽传书(IPMSG)的主要工作原理
- 下一篇: 又是飞鸽传书软件