Sto tentando di utilizzare unique_ptr
con un deleter personalizzato per il tipo SDL_Surface
. Questo è solo un esempio con il tipo int
, ma spero che tu ne abbia l'idea.Confuso utilizzando unique_ptr e un deleter personalizzato
#include <iostream>
#include <functional>
#include <memory>
typedef int SDL_Surface;
SDL_Surface * CreateSurface()
{
SDL_Surface * p = new SDL_Surface;
return p;
}
void FreeSurface(SDL_Surface *p)
{
delete p;
}
int main() {
std::unique_ptr<SDL_Surface, std::function< void (SDL_Surface *) > > uptr_1;
//how to assign a value to uptr_1 and the deleter?
return 0;
}
Is uptr_1
correttamente dichiarato e inizializzato a nullptr
? In tal caso, come posso assegnare il puntatore e la funzione di cancellazione?
E come posso incapsulare questo: std::unique_ptr< SDL_Surface, std::function< void (SDL_Surface *) > >
con la delezione di non sempre scrivere che la linea su ogni SDL_Surface
voglio, un'altra typedef?
Sto appena iniziando a imparare le funzionalità di C++ 11 e questo è difficile per me.
'std :: unique_ptr> uptr_1 (CreateSurface (), & :: FreeSurface); ' –
' std :: function' è una scelta sbagliata per un deleter nel caso generale, perché i suoi costruttori possono lanciare, ma il costruttore di deleter di 'unique_ptr' non deve lanciare. Tuttavia, se lo stai usando solo con un semplice puntatore a funzione, è sicuro. –
Correlati - https://stackoverflow.com/q/24251747/241631 – Praetorian