返回const自动对象 - 和Qt隐式共享

时间:2011-10-24 06:58:05

标签: c++ qt copy-on-write

所以众所周知这段代码并不敏感:

const int foo() 
{
  int n = // do computation...;
  return n;
}

因为无论如何复制“const int”是什么意思?

但是对于像Qt容器一样的隐式共享(COW)类,它又有意义吗?考虑:

const QList<mytype> get_list()
{
   QList<mytype> lst;
   // do stuff to fill list;
   return lst;
}

现在我能做到:

   const QList<mytype> mylst = get_list();

由于Qt具有容器的隐式共享,因此它应该可以正常工作,因为return lst并不真正复制列表的内容,只是增加引用计数,const确保我无法修改它(如果get_list由于某种原因想要确保它,或者需要它const方法本身)。我的想法是否正确?

1 个答案:

答案 0 :(得分:1)

  

和const确保我无法修改它......我的想法是否正确?

我无法理解整个问题。但是,以上部分是不正确的。您只返回该函数的const值,不强制接收端也是const。因此,允许从const删除mylst,并且它再次可以修改。

/* const */ QList<mytype> mylst = get_list();  // ok! 'mylst' is modifiable