Это безопасно, но потенциально (очень) медленно.
erase
на первый элемент вектора должен переместить все остальные элементы вектора, поэтому ваш цикл равен O (n ^ 2) по размеру вектора.
И нет необходимости erase
элементов, поскольку (а) они являются указателями (без деструктора) и (б) clear
все равно это сделает.
Итак:
for (itObject = m_vpObjects.begin(); itObject!=m_vpObjects.end(); ++itObject)
SAFE_DELETE( (*itObject) );
P.S. В вашем SAFE_DELETE
нет ничего особенно "безопасного", но это уже другая тема.
P.P.S. if (p) delete p;
является избыточным.