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。当你像我一样做的时候