我正在实现一个类似于 std 的自定义地图类,但是我有一个问题。在他们的地图中,当你这样做时(例如):
map<string, SomeObject*> container;
SomeObject* object = container["this doesn't exist"];
在调试器对象中是0x0000000,因此映射中的无效值始终为空。但是,在我的映射中,无效值就像未初始化的指针 - 它们具有像0xcdcdcdcd这样的无效值,但是在发布模式下它是别的东西,所以我不能依赖检查为了
if(object == 0xcdcdcdcd)
所以我希望能够做到这一点:
MyMap<string, SomeObject*> container;
SomeObject* object = container["this doesn't exist"]; //and for this to definetely be nullptr
所以我可以这样做
if(object == nullptr)
DoSomething();
我有一个bool ContainsKey(KeyType key); 函数,但它涉及一个 for 循环。是否有某种方法可以确保我在初始化时为地图提供什么,或者我是否必须制作一个自定义PointerWrapper,该指针将包含 SomeObject 的指针,该指针在PointerWrapper中设置为nullptr ' s 构造函数?我很难弄清楚 std 标头中发生了什么,它们有大量的宏和 typedef。