为什么这段代码在C ++中有内存泄漏

时间:2014-08-19 09:40:37

标签: c++ memory-leaks

我被告知以下代码会导致内存泄漏,但我不确定为什么

object f(void)
    {
    object * o = new object(...);
    return *o;
    }

是因为对象* o在返回之前被复制而且原始副本永远不会被删除,因为它不是自动变量吗?

1 个答案:

答案 0 :(得分:3)

new创建的对象永远不会delete d。

返回的值是一个单独的对象,它是从o指向的对象进行复制构造的。

通常,函数T f(){ /*...*/ return y; }创建其返回值,就像T{y}一样,即使用参数T构建y