Ho lavorato in 2 società di giochi, ho visto un certo numero di codebase e ho osservato una serie di dibattiti su argomenti come questi tra gli sviluppatori di giochi, quindi potrei essere in grado di offrire alcune osservazioni. La risposta breve per ogni punto è che varia molto da studio a studio o anche da squadra a squadra all'interno dello stesso studio. risposte lunghe elencate di seguito:
Utilizzato da alcuni studi, ma non altri. Molte squadre preferiscono ancora evitarlo. Le chiamate alle funzioni virtuali hanno un costo e il costo è evidente a volte anche sulle console moderne. Di quelli che usano il polimorfismo, la mia ipotesi cinica è che solo una piccola percentuale lo usa bene.
diviso a metà, per molte delle stesse ragioni di polimorfismo. STL è facile da usare in modo errato, quindi molti studi scelgono di evitarlo per questi motivi. Di quelli che lo usano pesantemente, molte persone lo accoppiano con gli allocatori personalizzati. EA ha creato EASTL, che risolve molti dei problemi STL relativi allo sviluppo del gioco.
- eccezione sicurezza/gestione,
Pochissimi studi di utilizzare la gestione delle eccezioni. Uno dei primi consigli per le console moderne è disattivare sia RTTI che le eccezioni. I giochi per PC probabilmente usano le eccezioni a un effetto molto più grande, ma tra le console le eccezioni sono molto spesso evitate. Aumentano la dimensione del codice, che può essere un premio, e letteralmente non sono supportati su alcune piattaforme rilevanti.
- modelli con design di classe basata su policy, design
politica basata ... Non sono venuto attraverso qualsiasi di esso. I modelli sono usati molto spesso per cose come l'introspezione/riflessione e il riutilizzo del codice. Il design basato sulla politica, quando ho letto il libro di Alexandrescu, mi sembrava una promessa sbagliata. Dubito che sia usato molto pesantemente nell'industria del gioco, ma varierà molto da studio a studio.
puntatori intelligenti sono abbracciati da molti degli studi che utilizzano anche il polimorfismo e STL. La gestione della memoria nei giochi per console è estremamente importante, quindi molte persone non amano il conteggio dei riferimenti ai puntatori intelligenti perché non sono espliciti riguardo a quando liberano ... ma questi non sono certamente l'unico tipo di puntatore intelligente. L'idea del puntatore intelligente in generale sta ancora guadagnando terreno. Penso che sarà molto più comune in 2-3 anni.
- new/delete, nuova collocazione/delete
Questi sono usati di frequente. Spesso sono sovrascritte per utilizzare gli allocatori personalizzati sottostanti, in modo che la memoria possa essere rintracciata e le perdite possano essere trovate con facilità.
Penso di essere d'accordo con la vostra conclusione. Il C++ non è usato negli studi di gioco per quanto possibile.Ci sono buone e cattive ragioni per questo. Le buone sono a causa delle implicazioni sulle prestazioni o dei problemi di memoria, le cattive sono perché le persone sono bloccate in un solco. In molti modi ha senso fare le cose nel modo in cui sono sempre state fatte, e se ciò significa C con C++ limitato allora significa C con C++ limitato. Ma ci sono un certo numero di pregiudizi anti-C++ in giro ... alcuni giustificati e altri no.
Una domanda correlata è un esempio di libreria che utilizza il C++ moderno: stackoverflow.com/questions/534311/.... Oltre ai soliti esempi di Boost e Loki, la discussione menziona le librerie di Google Chrome, OpenOffice e Adobe. Ulteriori informazioni su http://www.boost.org/users/uses_open.html per gli usi di boost. –
Googling Ho trovato http://www.deitel.com/ResourceCenters/Programming/CPlusPlusGameProgramming/tabid/1225/Default.aspx Contiene un paio di link che potrebbero interessarti. P.S. Potresti voler fare questa domanda wiki della comunità. – lothar
@lothar Non so se c'è un modo per renderlo un wiki della comunità ora. –