C++ 如何最好地将引用传递给函数?

C++ 如何最好地将引用传递给函数?,c++,pointers,reference,C++,Pointers,Reference,给定以下代码: [示例.h] class MyClass { public: MyClass(); std::string name; std::string address; bool method (MyClass &object); }; [example.cpp] MyClass::MyClass() { } bool MyClass::method (MyClass &object) { try { object.na

给定以下代码:

[示例.h]

class MyClass
{
public:
    MyClass();
    std::string name;
    std::string address;
    bool method (MyClass &object);
};

[example.cpp]

MyClass::MyClass()
{
}
bool MyClass::method (MyClass &object) {
  try {
      object.name = "New Name";
      std::cout << "Name: " << object.name << " " << object.address << std::endl;
      return true;
  }
  catch (...) {
      return false;
  }
}
我在上面的
main
中调用
myC.method
的方法与此替代方法有什么区别:

MyClass *myC = new MyClass(); 
bool quest = myC.method(*myC); 

哪一种更好?为什么?

在这两种情况下,您可以发送相同的值,但只需使用当前代码就更好了,因为它没有指针取消引用和
新建
。您需要在使用完对象后立即处理
删除
,我认为您在这里不需要这样做

最好在
方法
函数中使用
MyClass&object const
,这样传入的引用就不会被更改。

如果需要对象的持续时间超过调用它的函数的范围,则使用new(通常是动态内存分配)会更好。如果只是一个已知的持续时间,
MyClass-myC本地范围版本是最好的(因为它更易于阅读和维护)

使用
new
时,在调用
delete
之前,不会删除对象“myC”

但是,如果仅将其定义为本地对象,则当其超出范围时将被删除:

{
 MyClass myC;
 myC.DoSomeStuff();
} // It'll be destroyed here

谢谢你的回答!!:)我想问你,如果我有下面的例子MyClass*c=newmyclass;试试{//code}catch(inti){}我应该把deleteC放在哪里?试捕还是后捕?THX@@@sunset您应该单独问这个问题:苹果还是锤子好?您可能需要注意的是,没有必要让
MyClass::method
使用
MyClass&object
——当您使用
myC.method()调用它时,您已经可以使用
this
指针从
method
访问
myC
{
 MyClass myC;
 myC.DoSomeStuff();
} // It'll be destroyed here