我需要为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{});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)