【C++】 std::unique_ptr的使用

#include <iostream>
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdlib>
#include <cstring>
#include <initializer_list>
#include <iterator>
#include <memory>
#include <type_traits>
#include <utility>
#include <typeinfo>

template <typename T>
struct MakeUniqueResult {
    using scalar = std::unique_ptr<T>;
};
template <typename T>
struct MakeUniqueResult<T[]>
{
    using array = std::unique_ptr<T[]>;
};
template <typename T, size_t N>
struct MakeUniqueResult<T[N]> {
    using invalid = void;
};

int main()
{
    MakeUniqueResult<int>::scalar int_type(new int);
    std::cout << typeid(int_type).name() << std::endl;
    MakeUniqueResult<int[]>::array int_array_type(new int[5]);
    std::cout << typeid(int_array_type).name() << std::endl;
    //MakeUniqueResult<int[6]>::invalid void_type;
    //std::cout << typeid(void_type).name() << std::endl;
    return 0;
}

编译:

:g++ -std=c++11 main.cc -o main

运行:

:./main
NSt3__110unique_ptrIiNS_14default_deleteIiEEEE
NSt3__110unique_ptrIA_iNS_14default_deleteIS1_EEEE

还原:

:./main | c++filt
std::__1::unique_ptr<int, std::__1::default_delete<int> >
std::__1::unique_ptr<int [], std::__1::default_delete<int []> >
发布了423 篇原创文章 · 获赞 14 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/105475993