void *
CI에서 함수 를 얻으려면 다음과 같이하십시오 (매우 기본적인 예).
void *get_ptr(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
사용할 때 어떻게 같은 결과를 얻을 수 std::unique_ptr<>
있습니까?
답변
당신은 사용을 위해 사용자 정의 Deleter가를 지정해야합니다 void
같은 unique_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());
}
답변
std::free
functor를 구성하는 대신 삭제기로 직접 사용하는 @RealFresh의 답변 단순화 :
auto get_ptr(std::size_t size) {
return std::unique_ptr<void, decltype(&std::free)>(std::malloc(size), std::free);
}
그래도 질문에 대한 내 의견을 참조하십시오.
답변
대신 char-array에 대한 포인터를 반환하십시오.
#include <memory>
std::unique_ptr<char[]> get_ptr(std::size_t size)
{
return std::make_unique<char[]>(size);
}