Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这是在c+;中调用函数的正确方法吗+;?_C++ - Fatal编程技术网

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;