C ++指向同一类中的类成员的指针[概念]?

时间:2017-10-31 20:12:17

标签: c++ class pointers

`

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起作用。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

没有。 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
相关问题