std::make_unique
From cppreference.com
                    
                                        
                    < cpp | memory | unique ptr
                    
                                                            
                    | Defined in header  <memory> | ||
| template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ); | (1) | (since C++14) (only for non-array types) | 
| template< class T > unique_ptr<T> make_unique( std::size_t size ); | (2) | (since C++14) (only for array types with unknown bound) | 
| template< class T, class... Args > /* unspecified */ make_unique( Args&&... args ) = delete; | (3) | (since C++14) (only for array types with known bound) | 
Constructs an object of type T and wraps it in a std::unique_ptr.
1) Constructs a non-array type 
T. The arguments args are passed to the constructor of T. The function does not participate in the overload resolution if T is an array type. The function is equivalent to:
unique_ptr<T>(new T(std::forward<Args>(args)...))
2) Constructs an array of unknown bound 
T. The function does not participate in the overload resolution unless T is an array of unknown bound. The function is equivalent to:
unique_ptr<T>(new typename std::remove_extent<T>::type[size]())
3) Construction of arrays of known bound is disallowed.
| Contents | 
[edit] Parameters
| args | - | list of arguments with which an instance of Twill be constructed. | 
| size | - | the size of the array to construct | 
[edit] Return value
std::unique_ptr of an instance of type T.
[edit] Exceptions
Any exception thrown by the contructor of T. If an exception is thrown, this function has no effect.
[edit] See also
| constructs a new unique_ptr(public member function) | |