私が使用するプログラム 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;
}
私が疑わしいのは、同じ名前の2番目の方法です。
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()
ですか? - この呼び出しはクラッシュするべきではありませんか?
nullptr
!を逆参照します。または、少なくとも、このようにすることは危険なはずですか? 私が間違っている場合は、私を修正してください。