默认分配器是否归零int?

pet*_*ter 5 c++ stl allocator

使用STL容器时,我不确定默认分配器分配的int是否已归零.以下代码表示问题的"是":

#include <map>
#include <iostream>

int main() {
  using namespace std;
  map<int, int> m;
  cout << m[1234] << endl;
}
Run Code Online (Sandbox Code Playgroud)

由于没有文件证实这一点,我不敢把它视为理所当然.

Luc*_*ore 6

你会看到,在实现中std::map::operator[],如果在索引处找不到元素,则插入并返回一个新元素:

ReturnValue = this->insert(where, make_pair(key_value, mapped_type()));
Run Code Online (Sandbox Code Playgroud)

mapped_type在你的情况下,第二种类型在哪里int.所以是的,它被默认初始化为0,因为它被插入为mapped_type().

  • 实际上`new int`必然会产生一个指向不可预测值的指针; `new int()`将产生一个指向零的指针,因为`int()`是一个初始化为零的`int`. (2认同)

Die*_*ühl 6

该标准保证由于使用下标运算符而创建的对象是默认构造的.任何特定类的默认构造函数是否将您希望归零的成员归零都取决于类.对于没有构造函数的类,默认构造成员,默认构造基本类型相当于将其设置为"零"的版本.

注意,这与分配器无关!...并且可以非常安全地假设分配器保持内存不受影响,除了可能专用的调试分配器(或由人们写入的分配器被认为将内存归零可能是好事而不是设备隐藏错误)....并且调试分配器不会将内存归零,而是用可识别的模式填充它(例如,0xdeadbeef以十六进制查看时产生).