Update item21.md

Co-authored-by: Yang Yi <qingfeng.yy@alibaba-inc.com>
This commit is contained in:
猫耳堀川雷鼓 2021-02-23 11:58:52 +08:00 committed by GitHub
parent 302b6ddada
commit cbeb0a53a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -25,7 +25,7 @@ auto spw1(std::make_shared<Widget>()); //使用make函数
std::shared_ptr<Widget> spw2(new Widget); //不使用make函数
```
我高亮了区别:使用`new`的版本重复了类型,但是`make`函数的版本没有。(译者注:这里高亮的是`Widget`,用`new`的声明语句需要写2遍`Widget``make`函数只需要写一次。重复写类型和软件工程里面一个关键原则相冲突应该避免重复代码。源代码中的重复增加了编译的时间会导致目标代码冗余并且通常会让代码库使用更加困难。它经常演变成不一致的代码而代码库中的不一致常常导致bug。此外打两次字比一次更费力而且谁不喜欢减少打字负担
我高亮了关键区别:使用`new`的版本重复了类型,但是`make`函数的版本没有。(译者注:这里高亮的是`Widget`,用`new`的声明语句需要写2遍`Widget``make`函数只需要写一次。重复写类型和软件工程里面一个关键原则相冲突应该避免重复代码。源代码中的重复增加了编译的时间会导致目标代码冗余并且通常会让代码库使用更加困难。它经常演变成不一致的代码而代码库中的不一致常常导致bug。此外打两次字比一次更费力而且没人不喜欢少打字吧
第二个使用`make`函数的原因和异常安全有关。假设我们有个函数按照某种优先级处理`Widget`