C++ 中的引用让我感到困惑。:)
基本思想是我试图从函数中返回一个对象。我想在不返回指针的情况下执行此操作(因为那时我必须手动操作delete
它),并且如果可能的话,不调用复制构造函数(为了提高效率,自然添加:并且还因为我想知道我是否不能避免编写复制构造函数)。
因此,总而言之,这是我发现的执行此操作的选项:
- 函数返回类型可以是类本身 (
MyClass fun() { ... }
) 或对类的引用 (MyClass& fun() { ... }
)。 - 该函数既可以在 return (
return MyClass(a,b,c);
) 行构造变量,也可以返回现有变量 (MyClass x(a,b,c); return x;
)。 - 接收变量的代码也可以有任一类型的变量:(
MyClass x = fun();
或MyClass& x = fun();
) - 接收变量的代码可以动态创建一个新变量 (
MyClass x = fun();
) 或将其分配给现有变量 (MyClass x; x = fun();
)
以及对此的一些想法:
- 拥有返回类型似乎是个坏主意,
MyClass&
因为这总是会导致变量在返回之前被销毁。 - 复制构造函数似乎只在我返回现有变量时参与。当返回一个在返回行中构造的变量时,它永远不会被调用。
- 当我将结果分配给现有变量时,析构函数也总是在返回值之前启动。此外,没有调用复制构造函数,但目标变量确实接收从函数返回的对象的成员值。
这些结果是如此不一致,以至于我感到完全困惑。那么,这里到底发生了什么?我应该如何正确构造并从函数返回对象?