gpt4 book ai didi

c++ - Qt的foreach表达式需要深拷贝?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:12 25 4
gpt4 key购买 nike

我在使用 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
}

出于某种原因,foreach 正在对 Phrase 执行深度复制(我知道这一点,因为它需要我实现复制构造函数)。但是,如果有 Phrase 的拷贝——并且如果我不想创建每个 GlossItem 的深层拷贝——这意味着这些指针将被删除两次。 (或者,删除一次,然后崩溃。)所以我必须使用它,它有效但不太漂亮。

    for(int i=0; i<phrase->count(); i++ )
{
GlossItem *glossItem = phrase->at(i);
// use glossItem
}

有没有办法解决这个问题,还是我只需要忍受它?

最佳答案

来自文档

Qt automatically takes a copy of the container when it enters a foreach loop.

Since foreach creates a copy of the container, using a non-const reference for the variable does not allow you to modify the original container.

所以我认为对于你的特定用例 foreach 是不合适的,否则你最终会得到一个带有额外指针的 Phrase 的新拷贝,而不是返回实际的您想要的原始 Phrase

关于c++ - Qt的foreach表达式需要深拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com