Estoy almacenando un objeto (TTF_Font
) en un shared_ptr
que me es provisto desde una API de un tercero. No puedo usar new o delete en el objeto, por lo que el shared_ptr
también se proporciona como un functor de "liberación".Usando .reset() para liberar un impulso :: shared_ptr con propiedad única
// Functor
struct CloseFont
{
void operator()(TTF_Font* font) const
{
if(font != NULL) {
TTF_CloseFont(font);
}
}
};
boost::shared_ptr<TTF_Font> screenFont;
screenFont = boost::shared_ptr<TTF_Font>(TTF_OpenFont("slkscr.ttf", 8), CloseFont());
Si, más tarde, necesito liberar explícitamente este objeto es lo correcto para hacer esto:
screenFont.reset();
y luego dejar que screenFont
(shared_ptr
el objeto real) serán destruidos de forma natural?
Gracias por la respuesta. En mi caso, tengo que liberarlo explícitamente antes de otro recurso, y esta fue la única forma que encontré para hacer eso. –
Solo para que quede claro: restablecer() no liberará el recurso retenido a menos que resulte en que el recuento vuelva a cero, no fuerza el recuento a cero. –