无法理解零规则中的C++ 11语法

gol*_*ode 3 c++ idioms c++11 rule-of-zero

我正在研究零度规则,并且对最终的一段代码有两个问题,这些代码证明了规则.

class module {
    public:
        explicit module(std::wstring const& name)
        : handle { ::LoadLibrary(name.c_str()), &::FreeLibrary } {}

        // other module related functions go here

    private:
        using module_handle = std::unique_ptr<void, decltype(&::FreeLibrary)>;

        module_handle handle;
    };
Run Code Online (Sandbox Code Playgroud)
  1. 为什么要使用大括号而不是括号来初始化句柄?
  2. 使用module_handle = std :: unique_ptr是什么用的; 在这种情况下是什么意思?是否可以用typedef替换它?

mas*_*oud 7

为什么要使用大括号而不是括号来初始化句柄?

它是C++ 11中引入的统一初始化方法

使用module_handle = std :: unique_ptr是什么用的; 在这种情况下是什么意思?是否可以用typedef替换它?

它是模板别名,也用于创建新类型.using是一个新的和强大的替代品typedef