Time t (12, 0, 0); t.GetTime();
Time* t = new Time(12, 0, 0); t->GetTime();
这是使用没有new关键字和新关键字创建的对象来调用方法的正确方法吗? 感谢..
答案 0 :(得分:10)
摘录1
Time t (12, 0, 0);
由于t
是类型为Time
的结构或类,因此您可以使用.
运算符访问其成员,该引用称为元素选择。< / p>
t.GetTime();
摘录2
Time* t = new Time(12, 0, 0);
此处,t
是指向Time
的指针,因此您可以先取消引用指针,然后像以前一样使用.
运算符:
(*t).GetTime();
或者您使用的快捷方式,它使用元素选择通过指针运算符->
:
t->GetTime();
正如Armin正确指出的那样,您需要使用的元素访问形式取决于您通过其访问元素的变量类型。它不是由创建对象的方式决定的。例如:
Time t1 (12, 0, 0);
Time *t2 = &t1;
t1.GetTime();
t2->GetTime();
(&t1)->GetTime();
(*t2).GetTime();
答案 1 :(得分:5)
两者之间的区别在于第一个在堆栈上分配内存而在堆上分配第二个内存:
Time t (12, 0, 0); //t is an object on the stack
Time* t = new Time(12, 0, 0);//t is a pointer to an object on the heap
请注意,使用第二种方式需要调用:
delete t;
使用完毕后。
答案 2 :(得分:2)
假设你里面有Time类和GetTime函数,它是正确的但你应该释放内存 删除t为第二个,因为它不会自动删除