我正在尝试使用函数创建的对象填充std::vector
:
class Foo
{
public:
Foo() { std::cout << "Foo created!\n"; }
Foo(const Foo& other) { std::cout << "Foo copied!\n"; }
Foo(Foo&& other) { std::cout << "Foo moved\n"; }
~Foo() { std::cout << "Foo destroyed\n"; }
};
static Foo createFoo()
{
return Foo();
}
int main()
{
{
std::vector<Foo> fooVector;
fooVector.reserve(2);
fooVector.push_back(createFoo());
fooVector.push_back(createFoo());
std::cout << "reaching end of scope\n";
}
std::cin.get();
}
输出:
Foo created!
Foo moved
Foo destroyed
Foo created!
Foo moved
Foo destroyed
reaching end of scope
Foo destroyed
Foo destroyed
如何使得Foo
被销毁的次数多于创建的次数?我不理解这里发生了什么,我原本以为Foo
会被复制,但复制构造函数没有被触发。
如何最好地填充一个std::vector
,并且不让其中的对象在被添加后立即被销毁?这些对象是在其他地方创建的。