Это потому, что вы храните ссылку внутри вашего объекта, но &A::PrintA
и т. Д. Являются временными файлами, которые уничтожаются в конце полного выражения, и поэтому ссылка на член остается висячей, и ее использование приводит к неопределенному поведению.
Просто сохраните копию указателя функции-члена, чтобы исправить это:
FUNC mFunc;
PS.Когда mFuncs
уничтожается, уникальные указатели удаляют дочерние объекты через базовый указатель.Поведение не определено, если вы не объявите RunBase::~RunBase
virtual.
Итак, кто прав, а кто неправ и почему?
Ваша программа неправильна;Для него нет правильного поведения.