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