++ 11, , make_unique, , ++ 14. , ++ 11 .
#include <vector>
#include <memory>
#include <utility>
#include <iostream>
struct Item
{
int a, b;
Item(int aa, int bb) : a{aa}, b{bb} { }
};
static std::vector<std::unique_ptr<Item>> items;
template <class... Ts> Item& create(Ts&&... args)
{
items.emplace_back(std::unique_ptr<Item>{new Item(std::forward<Ts>(args)...)});
return *items.back();
}
int main()
{
Item& x = create(1, 2);
std::cout << "( " << x.a << ", " << x.b << " )" << std::endl;
}
, emplace_back() , unique_ptr<Item> , emplace_back() throw, Item unique_ptr.