【问题标题】:C++ pointer to a class member in the same class [Conceptual]?指向同一类中的类成员的C++指针[概念]?
【发布时间】:2017-10-31 20:12:16
【问题描述】:

`

class A{
public:
    int x;
    A* p;
};

int main(){

    A obj1 = new A(); //no suitable constructor exists to convert from "A *" to "A"
    A *obj2 = new A(); //Works fine
    return 0;
}

`

为什么类 A 的对象默认声明为指向该类的指针?

换句话说,为什么 obj1 不起作用,而 *obj2 起作用。

【问题讨论】:

  • 好吧,你使用的是new
  • obj 不是指向 A 类的指针。
  • 你不应该像写java一样尝试写C++

标签: c++ class pointers


【解决方案1】:

new 运算符返回一个指针,因此您只能将它分配给指针类型的变量。

您可以使用A obj1 = A();,它将简单地调用构造函数(不分配动态内存,这是new 所做的)并返回A,而不是A*

【讨论】:

    【解决方案2】:

    没有。 Why is an object of class A declared as a pointer to that class, by default? 不正确。类的对象只是该类型的对象,没有指针。

    关键字new 用于为指针分配动态内存。那就是内存必须在你完成后手动清理,否则你将面临内存泄漏。

    A* pObj = new A; // ok
    A  obj = new A; // error
    A  obj = *pObj; // ok:
    

    obj 上面只是 A 类的一个实例,而 pObj 是指向 A 类对象的指针,所以在指针内部有对象的地址,所以要访问它,我们 dereference 指针:

    obj = *pObj = 0; // De-referencing pObj and assigning the value it points to to obj.
    

    终于清理干净了:

    delete pObj; // ok
    delete obj; // error
    

    【讨论】:

      猜你喜欢
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多