我有一个关于类对象的非常基本的问题。创建类之后,我们需要创建一个类对象。在这一点上,我有点困惑,无论是*object
还是object
。例如:
CClass object
CClass *object
它们两者有什么区别?要访问类函数,我需要使用点'.'
和箭头'->'
。我知道用于访问类函数的点和箭头,但是点和箭头的重要意义是什么?
答案 0 :(得分:7)
在函数中使用时,第一个方法在堆栈上创建一个对象,并使用.
表示法调用方法。
CClass obj;
obj.method();
重要说明:无论处理如何离开封闭函数,对象都将被销毁。
在函数中使用时,第二种方法在堆上创建一个对象。并且因为您正在处理指针,所以必须使用->
符号
CClass *obj = new CClass(); // obj is a pointer to a new object on the heap
obj->method();
重要提示:当您离开该功能时,此对象不会被销毁,这意味着您必须在其他地方管理其生命周期。如果您需要销毁可以使用的对象:
delete obj;
答案 1 :(得分:3)
CClass object
定义名为object
的{{1}}类型的对象。
CClass
为CClass *ptr_object
ptr_object
我知道用于访问类功能的点和箭头,但是点和箭头的重要意义是什么?
CClass
在语义上等同于ptr_object->func()
答案 2 :(得分:2)
前面带有星号的版本声明了一个指向对象的指针 - 您需要使用“new”关键字为此分配空间,并确保在对象完成时使用“delete”释放内存。
另一个(非加星标)声明将对象声明为局部变量,它会在堆栈上自动分配空间,并在超出范围时自动清理。
理解这是一个重要的区别,您可能希望通过一个好的C ++教程来获得对该语言如何工作的良好解释。在http://www.cplusplus.com/doc/tutorial/有一个。
答案 3 :(得分:1)
第二行是指向对象的指针的示例。箭头 - >是取消引用指针和访问成员的简写。
CClass * object;
//CClass has a public method Go and a public member variable Mine
object->Go(); //shorthand for (*CClass).Go()