He trabajado en 2 compañías de juegos, he visto varias bases de códigos y observé una serie de debates sobre asuntos como estos entre desarrolladores de juegos, por lo que podría ofrecer algunas observaciones. La respuesta corta para cada punto es que varía mucho de un estudio a otro o incluso de un equipo a otro dentro del mismo estudio. respuestas largas enumeran a continuación:
Se utiliza en algunos estudios pero no en otros. Muchos equipos aún prefieren evitarlo. Las llamadas a funciones virtuales tienen un costo y ese costo es notable incluso en las consolas modernas. De los que usan polimorfismo, mi suposición cínica es que solo un pequeño porcentaje lo usa bien.
dividido por la mitad, para muchas de las mismas razones que el polimorfismo. STL es fácil de usar de manera incorrecta, por lo que muchos estudios eligen evitarlo por este motivo. De aquellos que lo usan mucho, muchas personas lo asocian con asignadores personalizados. EA ha creado EASTL, que resuelve muchas de las causas de STL en el desarrollo de juegos.
- seguridad excepción/manipulación,
Muy pocos estudios utilizan el manejo de excepciones. Una de las primeras recomendaciones para las consolas modernas es apagar tanto el RTTI como las excepciones. Los juegos de PC probablemente usan excepciones para un efecto mucho mayor, pero entre los estudios de consola las excepciones son rechazadas con mucha frecuencia. Aumentan el tamaño del código, que puede ser escaso y, literalmente, no es compatible con algunas plataformas relevantes.
- plantillas con diseño de clase basada en políticas, diseño
basado Política ... no he encontrado nada de eso. Las plantillas se utilizan con bastante frecuencia para cosas como introspección/reflexión y reutilización de código. El diseño basado en políticas, cuando leí el libro de Alexandrescu, me pareció una promesa errónea. Dudo que se use mucho en la industria del juego, pero variará mucho de un estudio a otro.
punteros inteligentes son abrazados por muchos de los estudios que también utilizan polimorfismo y STL. La administración de la memoria en los juegos de consola es extremadamente importante, por lo que a mucha gente no le gusta el recuento de referencias punteros inteligentes porque no son explícitos sobre cuándo son gratuitos ... pero estos no son ciertamente el único tipo de puntero inteligente. La idea del puntero inteligente en general aún está ganando tracción. Creo que será mucho más común en 2-3 años.
- nueva/borrar, colocación de nuevos/borrar
Estos se utilizan con frecuencia. Con frecuencia se anulan para usar asignadores personalizados debajo, de modo que la memoria se pueda rastrear y las fugas se puedan encontrar con facilidad.
Creo que estoy de acuerdo con su conclusión. C++ no se usa en los estudios de juegos tanto como podría.Hay buenas y malas razones para esto. Los buenos son debido a las implicaciones de rendimiento o problemas de memoria, los malos son porque las personas están atrapadas en una rutina. En muchos sentidos, tiene sentido hacer las cosas de la manera en que siempre se han hecho, y si eso significa C con C++ limitado, entonces significa C con C++ limitado. Pero hay una serie de sesgos anti-C++ flotando alrededor ... algunos justificados y otros no.
Una pregunta relacionada es ejemplos de una biblioteca que usa el moderno C++: stackoverflow.com/questions/534311/.... Además de los ejemplos habituales de Boost y Loki, la discusión menciona las bibliotecas de Google Chrome, OpenOffice y Adobe. Ver también http://www.boost.org/users/uses_open.html para los usos de boost. –
Google buscando Encontré http://www.deitel.com/ResourceCenters/Programming/CPlusPlusGameProgramming/tabid/1225/Default.aspx Contiene un par de enlaces que pueden interesarle. P.S. Es posible que desee hacer esta pregunta wiki de la comunidad. – lothar
@lothar No sé si hay una forma de convertirlo en una wiki de la comunidad ahora. –