我需要为shared_ptr做自定义删除器。我知道这可以通过类似的方式完成:
std::shared_ptr<SDL_Surface>(Surf_return_f(), MyDeleter);
但是我想以我的unique_ptr自定义删除器的样式来制作它们:
struct SDL_Surface_Deleter {
void operator()(SDL_Surface* surface) {
SDL_FreeSurface(surface);
}
};
using SDL_Surface_ptr = std::unique_ptr<SDL_Surface, SDL_Surface_Deleter>;
有什么办法吗?
似乎您正在尝试定义一个类型别名,该别名表示“std::shared_ptr
具有我的删除器类型”。没有这样的事情,因为std::shared_ptr
有一个类型擦除的删除器(该删除器不是该类型的一部分)。
相反,您可以创建的自定义版本make_shared
:
template <class... Args>
std::shared_ptr<SDL_Surface> make_sdl_surface(Args&&... args) {
return std::shared_ptr<SDL_Surface>(new SDL_Surface(std::forward<Args>(args)...),
SDL_Surface_Deleter{});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句