Estoy creando una clase que interopera con algún código API de Windows, ahora uno de los punteros que tengo que inicializar se hace llamando a una función nativa que lo inicializa.Inicializando un std :: unique_ptr pasando la dirección del puntero
Mis punteros son de tipo std::unique_ptr
con un Deleter costumbre, que llama a la función API de Windows proporciona Deleter, sin embargo no puedo dejar pasar la unique_ptr con el & operador de dirección a la init-función. ¿Por qué?
He creado un ejemplo que muestra mi problema:
#include <memory>
struct foo
{
int x;
};
struct custom_deleter {};
void init_foo(foo** init)
{
*init = new foo();
}
int main()
{
std::unique_ptr<foo, custom_deleter> foo_ptr;
init_foo(&foo_ptr);
}
Los ladridos del compilador y dice:
source.cpp: In function 'int main()':
source.cpp:19:21: error: cannot convert 'std::unique_ptr<foo, custom_deleter>*' to 'foo**' for argument '1' to 'void init_foo(foo**)'
Así que la solución es 'shared_ptr' o volver a los punteros primas? –
¿Y qué tal obtener? – ForEveR
@ForEverR: ¿qué hay de eso? Devuelve el * valor * de ese miembro de datos, no un puntero a ese miembro de datos. –