因此,我正在使用std::map作为关联数组。映射声明如下:

std::map<int, CustomClass*> CustomContainer;

稍后,我将CustomContainer对象用作关联数组,例如,
CustomClass* pClass = CustomContainer[ID]

Josuttis指出:



映射的值是CustomClass *类型。该值将默认为NULL还是未定义? (我认为不会,因为“指针”不是基本的数据类型)。我认为它也会在某种程度上依赖于构造函数以及那里的行为...。

CustomClass的唯一构造函数如下所示:
CustomClass::CustomClass(ClassA param1, ClassB param2, ClassC param3, ClassD param4)
:privateClassA(param1),
privateClassB(param2),
privateClassC(param3),
privateClassD(param4)
{

}

非常感谢!

最佳答案

未初始化的局部指针变量或字段将具有未定义的值,就像未初始化的int(或通常为POD类型的)局部变量或字段一样。但是,这与眼前的问题无关。

当您在 map 上使用operator[]并创建一个新条目时,它会默认初始化。这意味着指针的空指针值(对于int,则为0,依此类推)。它永远不会是不确定的。

如果您实际上需要检查 map 中是否存在具有此类键的项目,并且不想添加新条目,请使用find()成员函数,并将返回的迭代器与end()进行比较。

10-06 12:44