我使用的程序 API 的文档缺少所需的信息,因此我尝试自己了解如何使用该HashMap::FindOrCreateEntry()
方法。
template <typename C> Entry* FindOrCreateEntry(const K& key, C& constructor, Bool& created)
{
/* ... */
Entry* e = (Entry*) _allocator.Alloc(SIZEOF(Entry), C4D_MISC_ALLOC_LOCATION);
if (!e)
{
created = false;
return nullptr;
}
e = constructor.ConstructHashMapEntry(e, key);
/* ... */
return e;
}
我怀疑的部分是同名的第二种方法:
struct DefaultEntryConstructor
{
static Entry* ConstructHashMapEntry(void* ptr, const K& key)
{
return new (ptr) Entry(key);
}
};
Entry* FindOrCreateEntry(const K& key, Bool& created)
{
return FindOrCreateEntry(key, *(DefaultEntryConstructor*) nullptr, created); //lint !e413
}
- 为什么没有模板参数传递给 的调用
FindOrCreateEntry()
? - 这个电话不应该崩溃吗?它取消引用 a
nullptr
!或者至少,这样做应该很危险?如果我错了,请纠正我。