我对Qt的foreach函数有点问题.我有一个类Phrase,它是QList的子类.在〜Phrase中,我删除所有GlossItem指针.
在迭代Phrase中的GlossItem指针时,我想使用Qt的foreach:
// phrase is a pointer to a Phrase object,
// which is a subclassed QList<GlossItem*>
foreach( GlossItem *glossItem , *phrase )
{
// use glossItem
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,foreach正在对Phrase执行深层复制(我知道这是因为它需要我实现复制构造函数).但如果有一个短语的副本 - 如果我不想创建每个GlossItem的深层副本 - 这意味着这些指针将被删除两次.(或者,删除一次,然后崩溃.)所以我必须使用它,这可行,但不太漂亮.
for(int i=0; i<phrase->count(); i++ )
{
GlossItem *glossItem = phrase->at(i);
// use glossItem
}
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,还是只需要忍受它?
来自文档
Qt在进入foreach循环时自动获取容器的副本.
和
由于foreach创建了容器的副本,因此对变量使用非const引用不允许您修改原始容器.
因此,我认为对于您的特定用例foreach
并不合适,否则您最终会获得Phrase
带有附加指针的新副本,而不是返回Phrase
您想要的实际原件.
归档时间: |
|
查看次数: |
1666 次 |
最近记录: |