Occhio che i campi static sono un'altra cosa...
Consiglio: ci sono dei casi in cui è necessario tenere dei puntatori nella classe, o comunque dover gestire delle risorse; in questi casi:ma era solo per capire meglio il funzionamento delle cose e avere più chiaro il comportamento del codice che scrivo.
- se esistono classi che già fanno quello che vuoi fare incapsulando la gestione della memoria, usa quelle; ovvero, non usare vettori allocati con la new, ma std::vector;
- se invece hai puntatori ad oggetti di cui la classe è proprietaria, valuta l'uso di smart pointer, ed eventualmente disabilita copia e assegnazione (dichiarandoli come private e non definendoli, cosa che comunque viene da sé se hai come membri degli oggetti non copiabili) se non è necessaria;
- se devi gestire risorse (connessioni a DB, handle a risorse, ...), crea una classe wrapper che si occupi solo di quello (e.g. una classe DBConnection), non fare gestire più risorse direttamente alla stessa classe;
- nella classe che gestisce direttamente le risorse, se ha senso ed è ben definita una semantica di copia, definisci sempre assieme i "big three" (costruttore di copia, operatore di assegnamento, distruttore); in tal caso, usa il copy and swap idiom invece di inventarti cose strane, è uno dei pochi metodi che sicuramente funziona per implementarli.