[英]Pointer to object in C++
我在Stackoverflow.com
看到了以下代碼。 我一直在尋找相同的代碼,因為我對此表示懷疑。 如果我們看到以下代碼
CRectangle r1, *r2;
r2= new CRectangle;
1.我們為什么要做new CRectangle
? 實際上我們正在嘗試做什么?
CRectangle *r2 = 0;
, 然后,我們使用其他值或地址進行initialize
。 我真的很困惑。 請幫我。
using namespace std;
class CRectangle
{
int width, height;
public:
void set_values (int, int);
int area (void) {return (width * height);
}
};
void CRectangle::set_values (int a, int b)
{
width = a;
height = b;
}
int main ()
{
CRectangle r1, *r2;
r2= new CRectangle;
r1.set_values (1,2);
r2->set_values (3,4);
cout << "r1.area(): " << r1.area() << endl;
cout << "r2->area(): " << r2->area() << endl;
cout << "(*r2).area(): " << (*r2).area() << endl;
delete r2;
return 0;
}
C矩形r1,* r2; r2 =新的CRectangle;
r1
是對象。 r2
是指向對象的指針。
CRectangle *r2 = 0;
指針包含對象的地址。 如果指針尚未初始化,則它可以具有任何值(我們不知道)。 因此,我們初始化0
以便我們知道指針的值為0
。 我們可以使用該值來避免兩次初始化或某些內存錯誤。
當我們將對象分配給指針時,通常要做的是
if (r2 == 0)
r2 = new CRectangle;
else
std::cout << "Pointer is not empty or invalid" << std::endl;
CRectangle r1, *r2;
r2= new CRectangle;
此代碼聲明一個CRectangle
對象( r1
),以及一個指向CRectangle
對象的指針,該指針尚未指向任何內容( r2
)。 這兩個變量都分配在堆棧上。
第二行(從堆中)為新的CRectangle
對象分配內存,調用該類的任何構造函數,然后返回地址並將其分配給r2
。 因此, r2
然后指向一個CRectangle
對象。
將r2
設置為0或NULL
只是指示指針實際上沒有指向任何內容的標准方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.