[英]Whats the difference between Reference and Pointer return types in C++
如果我要在C ++中創建一個簡單的對象,返回成員的地址與返回指針之間的區別是什么。 據我所知,C ++沒有自動垃圾收集,因此它不會保留引用計數。 那么為什么會有人這樣做呢:
class CRectangle {
public:
string& getName( );
int& getWidth( );
int& getHeight( );
private:
string name;
int height;
int width;
};
而不是這樣:
class CRectangle {
public:
string* getName( );
int* getWidth( );
int* getHeight( );
private:
string name;
int height;
int width;
};
我意識到這些將允許您訪問成員數據,但我並不關心這個簡單示例中的正確封裝。 那么差異是什么? 加速? 可讀性? 樣式?
&
(在此上下文中)並不意味着“地址”。
聲明為string& getName( );
函數string& getName( );
返回引用 ,而不是指針。 引用本質上是另一個對象的別名。 因此,在這種情況下,它不會返回對象名稱的副本或指向名稱的指針,而是返回對名稱本身的引用。 因此,對返回對象的任何更改都將直接應用於對象的名稱。
您可以通過返回指針來實現相同的目標,但是存在兩個顯着差異:
*
和->
運算符),而引用的使用方式與使用對象本身完全相同。 null
,引用不能。 因此,無論何時使用指針,您都會向讀者發出“此值可能為null
”的信號。 在這種情況下, &
指的是參考 - 而不是地址。
首先,&form在C ++中稱為“引用”。 *表單稱為“指針”或“地址”。
加速 - 沒有區別。 可讀性 - 對於引用可能略有優勢,在upstack代碼中沒有derefencing。
風格 - 明確破壞封裝是足夠糟糕的風格來掩蓋任何其他東西。 如果你想要一個具有裸數據的對象,那么全公共結構也可以。
在從屬性類型方法(如getWidth()
返回指向整數的指針時,我無法想到這一點。 它增加了必須跟蹤內存所有權的負擔; 但實際上可能會增加返回類型的帶寬( int
和指針大小都是特定於平台的,並且可以且確實有所不同,但典型的大小分別為32位和64位)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.