1) W praktyce taka sytuacja nie powinna nigdy nastąpić. Albo alokujesz pojedynczy obiekt, albo tablicę. Poza tym w dzisiejszych czasach korzystamy z inteligentnych wskaźników shared_ptr,unique_ptr,observer_ptr:
#include <algorithm>
#include <memory>
void compute_something(std::size_t size) {
auto storage = std::make_unique<int[]>(size);
std::fill_n(storage.get(), size, 0);
// praca i nic więcej
}
Robimy dobrze jedno działanie, nic poza tym.
2) Tu tak samo. Jeżeli masz sytuację, że otwierasz plik A w funkcji, po czym go zamykasz i otwierasz plik B wykorzystując tą samą zmienną, to wiedz że Twoja funkcja robi za dużo operacji na raz i powinieneś pomyśleć o jej rozbiciu.