From \Engine\Source\Runtime\Core\Public\Containers\Queue.h
~TQueue()
{
while (Tail != nullptr)
{
TNode* Node = Tail;
Tail = Tail->NextNode;
delete Node;
}
}
The destructors condition functions purely off the assumption that the tail node is properly initialized, and does not account for any number of scenarios where tail’s next node is not valid but is also not c++ 11 null constant.
If tqueue or any nodes are initialized under sketchy conditions, not properly initialized, or not initialized at all, the destructor can go on a memory corrupting rampage since there is no validation, no type checking, no bounds checking, or any kind of cross check…