0
Time t (12, 0, 0); t.GetTime();

Time* t = new Time(12, 0, 0); t->GetTime();

这是使用没有新关键字和新关键字创建的对象调用方法的正确方法吗???谢谢..

4

3 回答 3

10

摘录 1

Time t (12, 0, 0); 

由于t是一个类型的结构或类Time,因此您可以使用运算符访问其成员,这.称为通过引用选择元素

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();
于 2013-07-09T12:23:03.190 回答
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;

当你完成使用它。

于 2013-07-09T12:24:07.323 回答
2

假设您在其中有 Time 类和 GetTime 函数,这是正确的,但您应该通过 delete t 释放第二个内存,因为它不会自动删除

于 2013-07-09T12:35:10.850 回答