在 for 循环中使用 push_front 不会将成员永久添加到列表中
Using push_front in a for loop doesn't permanently add a member to the list
我试图在我创建的类的列表上使用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次。每次都默认构造一个foo
。push_front
调用隐式定义的move构造函数,以便将这个临时foo
对象移动到列表中。(如果还在c++ 03模式下,也可以使用复制构造函数。)您不会看到打印任何内容,因为它不是默认构造函数。在每次迭代结束时,临时foo
被销毁。
return 0;
}
列表现在包含8个foo
,因此析构函数被调用8次。
额外的"创建"answers"销毁"是由于您通过调用
创建的临时变量foo()
这些临时变量被复制到列表中的新项目中,这些新项目也会在调用push_front时创建,并在列表超出作用域时销毁
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 将私有数据成员添加到野牛生成的类中
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 如何添加依赖于类本身的模板成员变量
- '将成员函数仅添加到类的专用模板
- QT:添加到QMenu后,谁是QActionGroup成员的父级
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- C 模板将某些类型的成员添加到类中
- 如果在C++中将成员添加到类中,则会导致编译时错误的技术
- 正在将非托管/非托管成员添加到托管类
- 为什么为结构的多个数据成员而不是单个成员添加填充
- 为什么没有将虚拟静态成员添加为C++的一个功能
- C++继承,将成员添加到派生类并重新定义构造函数
- 如何将类成员添加到向量中并正确使用它
- 如何将托管值类型成员添加到非托管类
- 为一个c++ vector成员添加一个标志
- 在不破坏旧代码的情况下,将成员添加到现有结构中
- 成员变量不会保存从函数成员添加到它的值