From a534a8c8a1abdac8ba998328af8fcdb95b0ba1e9 Mon Sep 17 00:00:00 2001 From: Yi Yang Date: Tue, 8 Mar 2022 14:28:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B2=97=E4=BD=93=E6=98=BE=E7=A4=BA=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.SmartPointers/item21.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/4.SmartPointers/item21.md b/4.SmartPointers/item21.md index d4a199f..96631ff 100644 --- a/4.SmartPointers/item21.md +++ b/4.SmartPointers/item21.md @@ -14,7 +14,7 @@ std::unique_ptr make_unique(Ts&&... params) 正如你看到的,`make_unique`只是将它的参数完美转发到所要创建的对象的构造函数,从`new`产生的原始指针里面构造出`std::unique_ptr`,并返回这个`std::unique_ptr`。这种形式的函数不支持数组和自定义析构(见[Item18](https://github.com/kelthuzadx/EffectiveModernCppChinese/blob/master/4.SmartPointers/item18.md)),但它给出了一个示范:只需一点努力就能写出你想要的`make_unique`函数。(要想实现一个特性完备的`make_unique`,就去找提供这个的标准化文件吧,然后拷贝那个实现。你想要的这个文件是N3656,是Stephan T. Lavavej写于2013-04-18的文档。)需要记住的是,不要把它放到`std`命名空间中,因为你可能并不希望看到升级C++14标准库的时候你放进`std`命名空间的内容和编译器供应商提供的`std`命名空间的内容发生冲突。 -`std::make_unique`和`std::make_shared`是三个**`make`函数**中的两个:接收任意的多参数集合,完美转发到构造函数去动态分配一个对象,然后返回这个指向这个对象的指针。第三个`make`函数是`std::allocate_shared`。它行为和`std::make_shared`一样,只不过第一个参数是用来动态分配内存的*allocator*对象。 +`std::make_unique`和`std::make_shared`是三个**make函数** 中的两个:接收任意的多参数集合,完美转发到构造函数去动态分配一个对象,然后返回这个指向这个对象的指针。第三个`make`函数是`std::allocate_shared`。它行为和`std::make_shared`一样,只不过第一个参数是用来动态分配内存的*allocator*对象。 即使通过用和不用`make`函数来创建智能指针的一个小小比较,也揭示了为何使用`make`函数更好的第一个原因。例如: