Sto creando una classe che si interpone con un codice API di Windows, ora uno dei puntatori che devo inizializzare viene fatto chiamando una funzione nativa che la inizializza.Inizializzazione di std :: unique_ptr passando l'indirizzo del puntatore
miei puntatori sono di tipo std::unique_ptr
con un deleter personalizzato, che chiama la funzione WinAPI deleter fornito, però non riesco a passare l'unique_ptr con l'& operatore di indirizzo per l'init funzione. Perché?
ho creato un esempio che illustra il mio 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);
}
Le cortecce compilatore e 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**)'
Quindi la soluzione è 'shared_ptr' o tornare a puntatori prime? –
E che ne dici di ottenere? – ForEveR
@ForEverR: che ne pensi? Restituisce il * valore * di quel membro dati, non un puntatore a quel membro dati. –