Investigamos en el mundo online y así de este modo brindarte la solución a tu problema, en caso de alguna duda déjanos la inquietud y responderemos sin falta, porque estamos para servirte.
Construye un objeto de tipo T
y lo envuelve en un std::unique_ptr
.
1) Construye un noarray escribe T
. Los argumentos args
se pasan al constructor de T
. Esta sobrecarga solo participa en la resolución de la sobrecarga si T
no es un array escribe. La función es equivalente a:
unique_ptr<T>(newT(std::forward<Args>(args)...))
2) Construye un array de destino desconocido T
. Esta sobrecarga solo participa en la resolución de la sobrecarga si T
es un array de límite desconocido. La función es equivalente a:
unique_ptr<T>(newtypenamestd::remove_extent<T>::type[size]())
3,6) No se permite la construcción de matrices de enlace conocido.4) Igual que (1), excepto que el objeto se inicializa por defecto. Esta sobrecarga solo participa en la resolución de la sobrecarga si T
no es un array escribe. La función es equivalente a:
unique_ptr<T>(new T)
5) Igual que (2), excepto que el array está inicializado por defecto. Esta sobrecarga solo participa en la resolución de la sobrecarga si T
es un array de límite desconocido. La función es equivalente a:
unique_ptr<T>(newtypenamestd::remove_extent<T>::type[size])
Parámetros
argumentos | – | lista de argumentos con los que una instancia de T será construido. |
Talla | – | el tamaño de la array para construir |
Valor devuelto
std::unique_ptr
de una instancia de tipo T
.
Excepciones
Puede tirar std::bad_alloc
o cualquier excepción lanzada por el constructor de T
. Si se lanza una excepción, esta función no tiene ningún efecto.
Posible implementación
// note: this implementation does not disable this overload for array typestemplate<typenameT,typename... Args> std::unique_ptr<T>make_unique(Args&&... args)return std::unique_ptr<T>(newT(std::forward<Args>(args)...)); |
Notas
diferente a std::make_shared
(que tiene std::allocate_shared
), std::make_unique
no tiene una contraparte consciente del asignador. Hipotético allocate_unique
sería necesario inventar el tipo de borrador D
Para el unique_ptr
devuelve que contendría un objeto asignador e invocaría a ambos destroy
y deallocate
en su operator()
.
Ejemplo
#include#include structVec3int x, y, z;Vec3():x(0),y(0),z(0)Vec3(int x,int y,int z):x(x),y(y),z(z)friend std::ostream&operator<<(std::ostream& os, Vec3& v)return os <<''<<"x:"<< v.x <<" y:"<< v.y <<" z:"<< v.z <<'';;intmain()// Use the default constructor. std::unique_ptr<Vec3> v1 = std::make_unique<Vec3>();// Use the constructor that matches these arguments std::unique_ptr<Vec3> v2 = std::make_unique<Vec3>(0,1,2);// Create a unique_ptr to an array of 5 elements std::unique_ptr<Vec3[]> v3 = std::make_unique<Vec3[]>(5); std::cout <<"make_unique (): " <<*v1 <<'n'<<"make_unique(0,1,2): " <<*v2 <<'n'<<"make_unique(5): " <<'n';for(int i =0; i <5; i++) std::cout <<" "<< v3[i]<<'n';
Producción:
make_unique<Vec3>():x:0 y:0 z:0 make_unique<Vec3>(0,1,2):x:0 y:1 z:2 make_unique<Vec3[]>(5):x:0 y:0 z:0x:0 y:0 z:0x:0 y:0 z:0x:0 y:0 z:0x:0 y:0 z:0
Ver también
(constructor) | construye un nuevo unique_ptr (función de miembro público) |
make_sharedmake_shared_default_init(C ++ 20) | crea un puntero compartido que administra un nuevo objeto (plantilla de función) |
Acuérdate de que te permitimos explicar si te fue de ayuda.