【发布时间】:2015-02-19 14:54:52
【问题描述】:
我正在尝试将unique_ptr 与SDL_Surface 类型的自定义删除器一起使用。这只是一个使用int 类型的示例,但我希望你能明白。
#include <iostream>
#include <functional>
#include <memory>
typedef int SDL_Surface;
SDL_Surface * CreateSurface()
{
SDL_Surface * p = new SDL_Surface;
return p;
}
void FreeSurface(SDL_Surface *p)
{
delete p;
}
int main() {
std::unique_ptr<SDL_Surface, std::function< void (SDL_Surface *) > > uptr_1;
//how to assign a value to uptr_1 and the deleter?
return 0;
}
uptr_1 是否正确声明并初始化为nullptr?如果是这样,我该如何分配指针和删除函数?
我该如何封装这个:
std::unique_ptr< SDL_Surface, std::function< void (SDL_Surface *) > > 与删除器不总是在我想要的每个 SDL_Surface 上写下该行,另一个 typedef?
我刚刚开始学习 C++11 功能,这对我来说很难。
【问题讨论】:
-
std::unique_ptr<SDL_Surface, std::function< void (SDL_Surface *) > > uptr_1(CreateSurface(), &::FreeSurface); -
std::function在一般情况下对于删除器来说是一个糟糕的选择,因为它的构造函数可以抛出,但unique_ptr的删除器的构造函数不能抛出。但是,如果您只将它与普通函数指针一起使用,它是安全的。
标签: c++ c++11 unique-ptr