Image* image = allocate_image(…); … deallocate_image(image); ↓ struct ImageDeleter { void operator()(void* image) const { deallocate_image(image); } }; unique_ptr<Image, ImageDeleter> image(allocate_image(…));
std::unique_ptr<Image, void (*)(Image *)>(image, deallocate_image);
scoped_ptr<Image> image(allocate_image(...));