我认为这有点主观;我不确定意见是否一致(我见过许多返回引用的代码片段)。

根据对我刚才问的这个问题的评论,关于初始化引用,返回一个引用可能是邪恶的,因为(据我所知)它更容易错过删除它,这可能导致内存泄漏。

这让我很担心,因为我已经遵循了一些例子(除非是我想象的事情),并且在相当多的地方这样做了……我误解了吗?它邪恶吗?如果是的话,到底有多邪恶?

我觉得因为我的指针和引用的混合包,加上我是c++的新手,以及完全不知道什么时候用什么,我的应用程序一定是内存泄漏的地狱…

另外,我知道使用智能/共享指针被普遍认为是避免内存泄漏的最佳方法。


当前回答

最好的方法是创建对象并将其作为引用/指针形参传递给分配该变量的函数。

在函数中分配对象并将其作为引用或指针返回(但指针更安全)是一个坏主意,因为会在函数块的末尾释放内存。

其他回答

我认为使用reference作为函数的返回值比使用pointer作为函数的返回值要直接得多。 其次,使用返回值所指向的静态变量总是安全的。

最好的方法是创建对象并将其作为引用/指针形参传递给分配该变量的函数。

在函数中分配对象并将其作为引用或指针返回(但指针更安全)是一个坏主意,因为会在函数块的末尾释放内存。

您应该返回一个对现有对象的引用,该对象不会立即消失,并且您不打算对其进行任何所有权转移。

永远不要返回对局部变量之类的引用,因为它不会在那里被引用。

你可以返回一个独立于函数的引用,你不希望调用函数负责删除它。典型的运算符[]函数就是这种情况。

如果你正在创建一些东西,你应该返回一个值或一个指针(常规或智能)。您可以自由地返回一个值,因为它将进入调用函数中的变量或表达式。永远不要返回指向局部变量的指针,因为它会消失。

有两种情况:

Const引用——有时是个好主意,特别是对于重载对象或代理类,编译器优化 非const引用——有时是个坏主意,会破坏封装

两者都有同样的问题——可能指向被破坏的对象……

我建议在需要返回引用/指针的许多情况下使用智能指针。

另外,还要注意以下几点:

有一个正式的规则- c++标准(如果你感兴趣,请参阅13.3.3.1.4节)声明临时对象只能绑定到const引用-如果你试图使用非const引用,编译器必须将其标记为错误。

    Class Set {
    int *ptr;
    int size;

    public: 
    Set(){
     size =0;
         }

     Set(int size) {
      this->size = size;
      ptr = new int [size];
     }

    int& getPtr(int i) {
     return ptr[i];  // bad practice 
     }
  };

getPtr函数可以在删除甚至空对象后访问动态内存。这可能导致坏访问异常。相反,应该实现getter和setter,并在返回之前验证大小。