Tôi đang lưu trữ một đối tượng (TTF_Font
) trong một shared_ptr
được cung cấp cho tôi từ API của bên thứ ba. Tôi không thể sử dụng mới hoặc xóa trên đối tượng, do đó, shared_ptr
cũng được cung cấp một hàm "giải phóng".Sử dụng .reset() để giải phóng quảng cáo :: shared_ptr với quyền sở hữu duy nhất
// 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());
Nếu sau đó, tôi cần phải dứt khoát miễn phí đối tượng này là nó đúng để làm điều này:
screenFont.reset();
Và sau đó để screenFont
(đối tượng thực tế shared_ptr
) bị phá hủy một cách tự nhiên?
Cảm ơn bạn đã trả lời. Trong trường hợp của tôi, tôi phải giải phóng nó một cách rõ ràng trước một tài nguyên khác, và đây là cách duy nhất tôi tìm thấy để làm điều đó. –
Chỉ cần rõ ràng - đặt lại() sẽ không giải phóng tài nguyên được giữ trừ khi nó dẫn đến việc số lần truy cập bị giảm xuống 0 - nó không ép buộc số lần truy cập bằng không. –