gpt4 book ai didi

c++ - 在 for 循环中使用 push_front 不会将成员永久添加到列表中

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:43 25 4
gpt4 key购买 nike

我正在尝试在我创建的类列表上使用 push_front() 函数。我把它放在一个 for 循环中,但是每当循环将新成员插入列表时,它就会立即自动销毁,我假设是因为它超出了范围。我的问题是如何永久添加这些项目。

例子:

class foo
{
public:
foo(){std::cout << "creation" << std::endl;}
~foo(){std::cout << "destruction" << std::endl;}
bool create() {return true;}
};

int main()
{
std::list<foo> foolist(4);
for (std::list<foo>::iterator i=foolist.begin(); i!=foolist.end(); i++)
{
foolist.push_front(foo());
}
return 0;
}

这是我得到的输出:

creation
creation
creation
creation
creation
destruction
creation
destruction
creation
destruction
creation
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction

当这是我想要实现的目标时:

creation
creation
creation
creation
creation
creation
creation
creation
destruction
destruction
destruction
destruction
destruction
destruction
destruction
destruction

最佳答案

让我们一次一行地浏览这个程序。

std::list<foo> foolist(4);

foo 的默认构造函数调用了 4 次。

foolist.push_front(foo());

这条语句运行了 4 次。每次都会默认构造一个 foopush_front 调用隐式定义的移动构造函数,以便将此临时 foo 对象移动到列表中。 (或者复制构造函数,如果您仍处于 C++03 模式。)您看不到任何打印的内容,因为它不是默认构造函数。在每次迭代结束时,临时 foo 被销毁。

    return 0;
}

列表现在包含 8 个 foo,因此析构函数被调用了 8 次。

关于c++ - 在 for 循环中使用 push_front 不会将成员永久添加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24814482/

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