C++ 返回对象的引用

标签 c++ return-by-reference

我目前正在学习 C++ 类(class),并且正在为引用文献而苦苦挣扎。我知道有一些类似的话题,但我找不到答案。 问题是我的教授希望我们在返回对象时使用引用,所以按值返回或使用指针作为返回是没有选择的。 所以我想我必须使用动态分配的对象(返回对本地对象的引用以一团糟结束......对吧?)

1. Complex& method() {
2. Complex *object = new Complex();
3. return *object; }

这是我苦苦挣扎的地方,我如何正确地捕获返回?

1. Complex one = object.method();

据我了解,有了这个我只会得到一个拷贝和一个内存泄漏 那么我如何用指针捕捉它呢?

1. Complex *two = new Complex();
2. delete two;
3. *two = object.method(); 

这似乎行得通,但是有没有一种方法可以只用一行呢?还是应该采取不同的方式?

最佳答案

一个想法是将返回的对象存储在您的对象中:

class Obj {
public:
  Complex &method() { c.data = 10; return c; }
private:
  Complex c;
};

这样就不会返回任何局部变量或堆分配。

关于C++ 返回对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32685269/

相关文章:

c++ - 按值返回与右值引用

c++ - 二传手的引用返回

C++ 内存错误 : free(): invalid next size (fast)

c++ - 从枚举中选择合适的函数

c++ - 通过引用传递 map<int, vector>

c++ - 在 C++ 中结合 getter 函数使用重载的比较运算符>

c++ - “Setter”方法不更改属性,但是测试方法输出“test”吗? (以最少的可复制示例重新提交)

c++ - 从 C++ 方法返回引用

c++ - boost C++ 单元测试代码覆盖率 TeamCity

c++ - 使用 libxmlsec 从内存中加载 RSA 私钥