Odnośnie drugiego, po co chcesz sprawdzać czy zaalokowana pamięć jest pusta? Odczyt komórek tablicy, które dopiero co zostały zaalokowane to undefined behavior, nie powinno się tego robić. Jeżeli chcesz mieć tablicę powiedzmy 20 wskaźników, ale tylko częściowo wypełnioną, ustaw resztę pól na nullptr, a następnie sprawdzaj if'em czy dana komórka jest poprawna (wskaźnik na coś da true, nullptr false).
MyClass * tab [10];
tab[0] = &myObject;
tab [1] = nullptr;
if (tab[0]) // true, ponieważ na coś wskazuje
{
}
if (tab[1]) // false, ponieważ nullptr
{
}