如果我创建一个函数,例如:
Mat func(const Mat& x, const Mat& y)
{
Mat result;
add(x,y,result);
return result;
}
结果会被正确删除吗?
答案 0 :(得分:4)
除非Mat
本身泄露内存,或add
做了一些真正可怕的事情,否则没关系。函数将返回Mat
实例,调用者可以使用该实例,而无需担心调用delete
& c。
对于函数本身,一个好的编译器 elide Mat
的值副本,从概念上讲,由于return result
会创建它。
使用C ++ 11,您甚至可以明确地提供移动构造函数 Mat(Mat&&)
,这有助于防止不必要的值副本被删除。