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

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

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

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

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


当前回答

我遇到了一个真正的问题,它确实是邪恶的。本质上,开发人员返回了对vector中对象的引用。太糟糕了!!

完整的细节我在一月份写过:http://developer-resource.blogspot.com/2009/01/pros-and-cons-of-returing-references.html

其他回答

关于糟糕的代码:

int& getTheValue()
{
   return *new int;
}

实际上,内存指针在返回后丢失。但是如果你像这样使用shared_ptr:

int& getTheValue()
{
   std::shared_ptr<int> p(new int);
   return *p->get();
}

内存在返回后不会丢失,并将在分配后释放。

这并不邪恶。像c++中的许多东西一样,如果使用正确,它是好的,但在使用它时应该注意许多陷阱(比如返回对局部变量的引用)。

有一些好的东西可以用它来实现(比如map[name] = "hello world")

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

No.

不好的是引用动态分配的对象而丢失了原来的指针。当你新建一个对象时,你承担了保证删除的义务。

但是看一下,例如,操作符<<:必须返回一个引用,或者

cout << "foo" << "bar" << "bletch" << endl ;

不能工作。

对已接受答案的补充:

Struct immutableint { Immutableint (int i): i_(i) {} Const int& get() Const{返回i_;} 私人: int i_; };

我认为这个例子是不好的,如果可能的话应该避免。为什么?很容易以悬空引用结束。

用一个例子来说明这一点:

struct Foo
{
    Foo(int i = 42) : boo_(i) {}
    immutableint boo()
    {
        return boo_;
    }  
private:
    immutableint boo_;
};

进入危险区域:

Foo foo;
const int& dangling = foo.boo().get(); // dangling reference!