C++ c++;方法参数类引用
我很抱歉问这么一个新手问题。 我的问题是:C++ c++;方法参数类引用,c++,C++,我很抱歉问这么一个新手问题。 我的问题是: MyClass* c = new MyClass("test"); method(c);//error cannot convert MyClass* to MyClass 定义: method(MyClass c); 我还应该定义吗 method(MyClass* c); 我不想重复代码,正确的方法是什么 MyClass *c = new MyClass("test"); method(*c); 如果您定义了method(MyClass c
MyClass* c = new MyClass("test");
method(c);//error cannot convert MyClass* to MyClass
定义:
method(MyClass c);
我还应该定义吗
method(MyClass* c);
我不想重复代码,正确的方法是什么
MyClass *c = new MyClass("test");
method(*c);
如果您定义了method(MyClass c)
但是如果您定义了类似method(MyClass*c)的方法代码>
那就应该是
MyClass *c = new MyClass("test");
method(c);
这两种选择的结果取决于您想要对所创建的对象执行的操作
如果您定义了method(MyClass c)
但是如果您定义了类似method(MyClass*c)的方法代码>
那就应该是
MyClass *c = new MyClass("test");
method(c);
这两种选择的结果取决于您想要对所创建的对象执行的操作 你显然是个Java程序员!首先,您需要执行以下操作:
MyClass* c = new MyClass("test");
请注意,c
是一个“指向MyClass
”的指针-这是必需的,因为new
表达式为您提供了指向动态分配对象的指针
现在,要将其传递给接受MyClass
参数的函数,需要取消对指针的引用。也就是说,您将执行以下操作:
method(*c);
请注意,由于函数按值(不是引用)获取MyClass
,因此对象将复制到函数中。方法中的MyClass
对象将是您先前分配的对象的副本。参数的类型取决于您希望函数做什么和传递什么。相反,如果您希望引用对象,以便修改函数内的对象将修改函数外的c
对象,则需要函数采用MyClass&
参数-引用MyClass
如果参数的类型为MyClass*
,则只需执行以下操作:
method(c);
这将为您提供与传递引用类似的语义,因为指针c
将被复制到函数中,但指针引用的对象仍然是动态分配的MyClass
对象。也就是说,如果在函数内部修改*d
,则c
指向的对象也会被修改
像这样传递原始指针通常不是一个很好的方法。函数必须显式检查指针是否为空,否则程序可能在某些情况下崩溃。如果您想要传递引用语义,请使用引用类型——这就是它们的用途
但是,最好不要首先动态分配MyClass
对象。我猜您只使用了new
,因为您在Java中做了很多。在C++中,使用<代码>新< /COD>表达式动态分配对象。通常,您不希望动态分配对象。使用自动存储持续时间创建它是非常好的,您希望这样做:
MyClass c("test");
method(c);
<> P>认为C++是很好的实践,避免指针和动态分配,除非你有充分的理由。这只会导致您编写更复杂的代码,并为错误和bug留出更多空间。事实上,您给出的代码已经有问题了,因为您没有删除c代码>。当您按照我刚才的建议执行操作时,不需要显式删除任何内容,因为对象超出范围时将被销毁。您显然是一名Java程序员!首先,您需要执行以下操作:
MyClass* c = new MyClass("test");
请注意,c
是一个“指向MyClass
”的指针-这是必需的,因为new
表达式为您提供了指向动态分配对象的指针
现在,要将其传递给接受MyClass
参数的函数,需要取消对指针的引用。也就是说,您将执行以下操作:
method(*c);
请注意,由于函数按值(不是引用)获取MyClass
,因此对象将复制到函数中。方法中的MyClass
对象将是您先前分配的对象的副本。参数的类型取决于您希望函数做什么和传递什么。相反,如果您希望引用对象,以便修改函数内的对象将修改函数外的c
对象,则需要函数采用MyClass&
参数-引用MyClass
如果参数的类型为MyClass*
,则只需执行以下操作:
method(c);
这将为您提供与传递引用类似的语义,因为指针c
将被复制到函数中,但指针引用的对象仍然是动态分配的MyClass
对象。也就是说,如果在函数内部修改*d
,则c
指向的对象也会被修改
像这样传递原始指针通常不是一个很好的方法。函数必须显式检查指针是否为空,否则程序可能在某些情况下崩溃。如果您想要传递引用语义,请使用引用类型——这就是它们的用途
但是,最好不要首先动态分配MyClass
对象。我猜您只使用了new
,因为您在Java中做了很多。在C++中,使用<代码>新< /COD>表达式动态分配对象。通常,您不希望动态分配对象。使用自动存储持续时间创建它是非常好的,您希望这样做:
MyClass c("test");
method(c);
<> P>认为C++是很好的实践,避免指针和动态分配,除非你有充分的理由。这只会导致您编写更复杂的代码,并为错误和bug留出更多空间。事实上,您给出的代码已经有问题了,因为您没有删除c代码>。当你像我一样做的时候