【发布时间】:2020-06-19 10:37:39
【问题描述】:
我需要为 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 自定义删除器的风格”是什么意思?
-
让它看起来像这样: using SDL_S_ptr = std::shared_ptr
;我希望能够使用我的类型,而不必每次创建变量时都指定 MyDeleter。 -
shared_ptr 和 unique_ptr 的删除器不同。 unique_ptr 将删除器直接存储在指针中,因此不同的删除器具有不同的指针类型。通常这是一个问题,因为在同一个指针类型中不能有不同的删除器。 shared_ptr 将它存储在堆上,所以它没有这个问题。
标签: c++ c++11 sdl smart-pointers