从函数返回唯一的空指针

Zep*_*ock 11 c c++ unique-ptr

要从void *CI 中的函数获取 a将执行以下操作(非常基本的示例):

void *get_ptr(size_t size)
{
    void *ptr = malloc(size);
    return ptr;
}
Run Code Online (Sandbox Code Playgroud)

使用时如何获得相同的结果std::unique_ptr<>

Dee*_*doo 18

您需要指定自定义删除器才能使用voidasunique_ptr的类型参数,如下所示:

#include <memory>
#include <cstdlib>

struct deleter {
    void operator()(void *data) const noexcept {
        std::free(data);
    }
};

std::unique_ptr<void, deleter> get_ptr(std::size_t size) {
    return std::unique_ptr<void, deleter>(std::malloc(size));
}

#include <cstdio>
int main() {
    const auto p = get_ptr(1024);
    std::printf("%p\n", p.get());
}
Run Code Online (Sandbox Code Playgroud)