[英]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.