C++ 这是在c+;中调用函数的正确方法吗+;?
使用不使用新关键字和使用新关键字创建的对象调用方法是否正确???C++ 这是在c+;中调用函数的正确方法吗+;?,c++,C++,使用不使用新关键字和使用新关键字创建的对象调用方法是否正确??? 谢谢。节选1 Time t (12, 0, 0); t.GetTime(); Time* t = new Time(12, 0, 0); t->GetTime(); 由于t是类型为Time的结构或类,因此可以使用操作符访问其成员,该操作符称为“通过引用选择元素” 摘录2 t.GetTime(); 这里,t是指向时间的指针,因此您可以先取消引用该指针,然后像前面一样使用运算符: Time* t = new Time(12
谢谢。节选1
Time t (12, 0, 0); t.GetTime();
Time* t = new Time(12, 0, 0); t->GetTime();
由于t
是类型为Time
的结构或类,因此可以使用
操作符访问其成员,该操作符称为“通过引用选择元素”
摘录2
t.GetTime();
这里,t
是指向时间的指针,因此您可以先取消引用该指针,然后像前面一样使用
运算符:
Time* t = new Time(12, 0, 0);
或者您使用的快捷方式,即通过指针运算符选择元素,->
:
(*t).GetTime();
正如Armin正确指出的那样,您需要使用的元素访问形式由您访问元素的变量类型决定。它不是由对象的创建方式决定的。例如:
t->GetTime();
两者的区别在于第一个在堆栈上分配内存,第二个在堆上分配内存:
Time t1 (12, 0, 0);
Time *t2 = &t1;
t1.GetTime();
t2->GetTime();
(&t1)->GetTime();
(*t2).GetTime();
请注意,使用第二种方式需要调用:
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
当您完成使用它时。假设它里面有Time类和GetTime函数,这是正确的,但是您应该在
删除第二个的t,因为它不是自动删除的是的,显然,至少在语法上是这样。但是你的C++书中说了什么?两者都是等价的,除了第二个可能导致内存泄漏,如果你没有<代码>删除< /Cord>对象。+ 1。我想在你的好答案中添加一句话,明确地说对象的创建方式与元素访问无关(可能会添加一个示例,如Time t;Time*pt=&t;pt->GetTime();@MSalters非常感谢您的编辑!
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;