我被告知以下代码会导致内存泄漏,但我不确定为什么
object f(void)
{
object * o = new object(...);
return *o;
}
是因为对象* o在返回之前被复制而且原始副本永远不会被删除,因为它不是自动变量吗?
答案 0 :(得分:3)
new
创建的对象永远不会delete
d。
返回的值是一个单独的对象,它是从o
指向的对象进行复制构造的。
通常,函数T f(){ /*...*/ return y; }
创建其返回值,就像T{y}
一样,即使用参数T
构建y
。