为什么我们需要特殊的算法来写入未初始化(但已分配)的内存?正常的修改算法不会吗?或者未初始化的内存是否与名称本身所表达的意思不同?
取std::copy和std::uninitialized_copy的范围std::string。
常规copy会假设那里已经存在一个字符串。如果可能,字符串的复制赋值运算符将尝试使用字符串中的任何现有空间进行复制。
但是,如果那里还没有字符串,例如在未初始化内存的情况下,复制赋值运算符将访问垃圾内存并且行为未定义。
另一方面,未初始化的副本将在那里创建字符串而不是分配给它,因此它可以在尚未包含字符串的内存中使用。
从本质上讲,常规版本将包含一个*it = value;,而未初始化的版本将包含类似new (&(*it)) T(value);.
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |