Sono fuori dal C ++ da anni, l'ultima volta che l'ho usato è tornato in gamedesign prima di C ++ 11. Vedo tutti questi nuovi tipi di puntatore che sembrano grandi. Ma non sono sicuro di quando e come usarli. In passato avrei creato un buffer come questo:
uint bufferSize = 1024;
unsigned char *buffer = (unsigned char*)malloc(bufferSize, sizeof(char));
Non è bello e sono abbastanza sicuro che anche allora il nuovo / delete era già una cosa in C ++, ma non ne ho mai appreso in quel momento. Non credo che i puntatori grezzi dovrebbero essere usati se evitabili, quindi sto cercando di abituarmi a scrivere questo ora:
uint bufferSize = 1024;
std::unique_ptr<unsigned char[]> buffer;
buffer = std::make_unique<unsigned char[]>(bufferSize);
Ma questo solleva la domanda, dovrei semplicemente mappare i vecchi puntatori grezzi a unique_ptr
come questo? C'è anche std::vector
, che sembra un adattamento molto più naturale per qualsiasi array. Dovrei usare invece un vettore? Ci sono regole pratiche per quando usare l'una o l'altra (per gli array)?
Per aggiungere informazioni più specifiche, sto creando un gioco e sto impostando uno screenbuffer su cui disegnare, sto iniziando con ASCII e probabilmente passerò ai pixel da qualche parte in futuro. La dimensione del buffer non dovrà mai cambiare in fase di esecuzione, ma sarebbe bello poter giocare un po 'con le dimensioni dello schermo durante lo sviluppo, ecco perché non sto semplicemente dichiarando un array a lunghezza fissa (il mio bufferSize è in realtà due Sts moltiplicato; screenWidth e screenHeight). Questo è solo un prototipo, non deve essere scalabile o distribuibile, ma voglio ancora sfruttare questa possibilità per imparare a scrivere meglio il C ++.