= {} выполняет сразу две операции.{} - это формирование пустого списка инициализации [?]. Эта операция сводится к формированию local temporary [?] с типом int* и инициализации этого temporary local методом default initialization [?], который для данного типа сводится к методу zero initialization [?].int* будет nullptr.= и выполняет инициализацию определенного arr значением ранее выведенного temporary local и с использованием метода copy initialization [?].arr методом zero initialization.nullptr и без проверки поступает в область разыменования. Это все приводит к неопределенному поведению [?]. int *arr производит определение указателя на память с предположительным типом int.int *arr = {}. Что в точности означает = {} в этом коде? int *arr = {}? NodeContainer ведет себя как std::shared_ptr, то тебе стоит использовать std::shared_ptr и не тратить силы на свои аналоги. std::shared_ptr позволяет приведение к типу.NodeContainer и какую задачу ты решаешь через иерархию NodeBase. Если тебе интересно изучить действительно качественное решение твоей задачи, тебе стоит постараться объяснить. NodeContainer<RedNode> и NodeContainer<BlueNode> будут являться абсолютно разными типами? Просто я не представляю, как ты будешь с этим работать.NodeBase? вы можете олтветить на вопрос. а не задавать свои волпросы?
Деструктор класса при исключении не будет вызван. Соответственно, не будет вызван и деструктор предка.