Почему «идентификатор не определён»?
1. Вытащи p, p1, p2 наружу из if. Читай «область видимости».

2. Я бы сделал так…
Work* p = NULL;
if () {
  p = new Work();
}
delete p;
Работает, потому что NULL можно спокойно уничтожать, и ничего не будет.

На Си++11 можно также использовать умные указатели.
std::unique_ptr<Work> p;
if () {
  p = std::make_unique<Work>();  // простите, это Си++14, на 11 чуть не так.
}
Потому что p, p1 и p2 -- локальные для блока if (flak == 0), и за его пределами не существуют.
См.