#include <vector>
#include <iostream>
class Foo
{
public:
Foo(int x) : data_(x)
{
std::cout << " constructing " << std::endl;
}
~Foo()
{
std::cout << " destructing " << std::endl;
}
Foo& operator=(const Foo&) = default;
Foo& operator=(Foo&&) = default;
Foo(Foo&& other) noexcept : data_(std::move(other.data_))
{
std::cout << " Move constructing " << std::endl;
}
Foo(const Foo& other) noexcept : data_(other.data_)
{
std::cout << " Copy constructing " << std::endl;
}
private:
int data_;
};
int main ( int argc, char *argv[])
{
std::vector<Foo> v;
v.reserve(2);
v.emplace_back(1);
std::cout << "Added 1" << std::endl;
v.emplace_back(2);
std::cout << "Added 2" << std::endl;
v.emplace_back(3);
std::cout << "Added 3" << std::endl;
std::cout << "v size: " << v.size() << std::endl;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgRm9vCnsKICBwdWJsaWM6CiAgRm9vKGludCB4KSA6IGRhdGFfKHgpCiAgewogICAgc3RkOjpjb3V0IDw8ICIgY29uc3RydWN0aW5nICIgPDwgc3RkOjplbmRsOwogIH0KCiAgfkZvbygpCiAgewogICAgc3RkOjpjb3V0IDw8ICIgZGVzdHJ1Y3RpbmcgIiA8PCBzdGQ6OmVuZGw7CiAgfQoKICBGb28mIG9wZXJhdG9yPShjb25zdCBGb28mKSA9IGRlZmF1bHQ7CiAgRm9vJiBvcGVyYXRvcj0oRm9vJiYpID0gZGVmYXVsdDsKCiAgIEZvbyhGb28mJiBvdGhlcikgbm9leGNlcHQgOiBkYXRhXyhzdGQ6Om1vdmUob3RoZXIuZGF0YV8pKQogICB7CiAgICBzdGQ6OmNvdXQgPDwgIiBNb3ZlIGNvbnN0cnVjdGluZyAiIDw8IHN0ZDo6ZW5kbDsKICAgfQoKICAgRm9vKGNvbnN0IEZvbyYgb3RoZXIpIG5vZXhjZXB0IDogIGRhdGFfKG90aGVyLmRhdGFfKQogICB7CiAgICBzdGQ6OmNvdXQgPDwgIiBDb3B5IGNvbnN0cnVjdGluZyAiIDw8IHN0ZDo6ZW5kbDsKICAgfQoKICBwcml2YXRlOgogIGludCBkYXRhXzsKfTsKCgppbnQgbWFpbiAoIGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICBzdGQ6OnZlY3RvcjxGb28+IHY7CiAgdi5yZXNlcnZlKDIpOwogIHYuZW1wbGFjZV9iYWNrKDEpOwogIHN0ZDo6Y291dCA8PCAiQWRkZWQgMSIgPDwgc3RkOjplbmRsOwogIHYuZW1wbGFjZV9iYWNrKDIpOwogIHN0ZDo6Y291dCA8PCAiQWRkZWQgMiIgPDwgc3RkOjplbmRsOwogIHYuZW1wbGFjZV9iYWNrKDMpOwogIHN0ZDo6Y291dCA8PCAiQWRkZWQgMyIgPDwgc3RkOjplbmRsOwogIHN0ZDo6Y291dCA8PCAidiBzaXplOiAiIDw8IHYuc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKfQ==