Shared_ptr 自定义删除器
Shared_ptr custom deleter
我需要为 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>;
有什么办法吗?
与 unique_ptr
不同,shared_ptr
的删除器不是类型的一部分。您必须将删除器传递给 shared_ptr
.
的构造函数
您可以将其包装在一个函数中:
std::shared_ptr<SDL_Surface> make_shared_surface(SDL_Surface* surface)
{
return std::shared_ptr<SDL_Surface>(surface, MyDeleter);
}
然后调用make_shared_surface(Surf_return_f())
.
您似乎在尝试定义一个类型别名,意思是“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{});
}
我需要为 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>;
有什么办法吗?
与 unique_ptr
不同,shared_ptr
的删除器不是类型的一部分。您必须将删除器传递给 shared_ptr
.
您可以将其包装在一个函数中:
std::shared_ptr<SDL_Surface> make_shared_surface(SDL_Surface* surface)
{
return std::shared_ptr<SDL_Surface>(surface, MyDeleter);
}
然后调用make_shared_surface(Surf_return_f())
.
您似乎在尝试定义一个类型别名,意思是“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{});
}