指向C++中对象的指针

Pointer to object in C++

本文关键字:指针 对象 C++ 指向      更新时间:2023-10-16

我在Stackoverflow.com中看到了以下代码。我一直在寻找相同的代码,因为我有疑问。如果我们将看到以下代码
CRectangle r1, *r2;r2= new CRectangle;
1.我们为什么要做new CRectangle?我们到底想做什么?

  1. 一位同事告诉我,当我们编写代码时,
    CCD_ 5

然后我们用一些其他值或地址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=新的C角度;

r1是对象。r2是指向对象的指针。

CRectangle *r2 = 0;

指针包含对象的地址。如果指针没有初始化,它可以有任何值(我们不知道)。因此,我们初始化0,这样我们就知道我们的指针有值0。我们可以使用该值来避免双重初始化或某些内存错误。

当我们准备将对象分配给指针时,我们通常要做的是_

if (r2 == 0)
    r2 = new CRectangle;
else
    std::cout << "Pointer is not empty or invalid" << std::endl;

在您的示例中,r1具有CRectangle类的类型,但r2具有指向CRectangle类的指针类型。指针只是全局内存(堆)中的地址。为了将内存分配并标记为CRectangle对象,我们需要使用new

请阅读

中的详细信息
CRectangle r1, *r2;    
r2= new CRectangle;

这段代码声明了一个CRectangle对象(r1)和一个指向CRectangle对象的指针,该对象还没有指向任何东西(r2)。这两个变量都是在堆栈上分配的。

第二行为新的CRectangle对象(来自堆)分配内存,调用该类的任何构造函数,然后返回地址并将其分配给r2。因此CCD_ 22然后指向一个CCD_ 23对象。

r2设置为0或NULL只是指示指针实际上没有指向任何东西的标准方式。