2011-11-27 23 views
3

我想知道这是否会导致内存泄漏:返回解除引用的新内存泄漏?

std::string test() { 
    return *(new std::string("")); 
} 
+0

你为什么不干脆'返回“”;'? – fredoverflow

+0

@FredOverflow这只是一个例子 – Zaffy

+1

类似的问题得到了[一个非常详细的答案+解释这里](http://stackoverflow.com/a/8840302/85371) – sehe

回答

12

是的,这是一个内存泄漏。函数返回时,将复制原始字符串对象。

然后原来的new'ed指针超出了范围,并失去了 - 泄漏。

0

为了让更少的泄漏使其返回一个参考:

std::string& test() { 
    return *(new std::string("")); 
} 
+1

所以当我例如有std :: string&abc =测试();我打电话删除&abc;不会有任何泄漏? – Zaffy