mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2025-01-27 20:30:28 +08:00
Update item21.md
Co-authored-by: Yang Yi <qingfeng.yy@alibaba-inc.com>
This commit is contained in:
parent
302b6ddada
commit
cbeb0a53a9
@ -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`:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user