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 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 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 T will 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)  | |