Ver Mensaje Individual
  #12 (permalink)  
Antiguo 09/02/2015, 10:29
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: [Consulta]Tile Map.¿Mejor std::vector o array?

Cita:
Iniciado por amchacon Ver Mensaje
Una ventaja que tiene los vectores frente a los arreglos esque en la depuración puedes usar la función at.

Es igual que los operadores [] pero lanza una excepción si adcedes fuera de rango. Muy útil para detectar desbordamientos de array.
O_O usa valgrid, te ayuda a detectar memory leaks y este tipo de errores.

Cita:
Iniciado por amchacon Ver Mensaje
Lo cual no es excusa, simplemente es usar el contenedor adecuado. El contenedor Array tiene un tamaño constante por ejemplo:
http://www.cplusplus.com/reference/array/array/
Solo para tener at, swap y otros métodos?
Para que me agrege overhead y me complique el manejo de memoria al ponerlo en heap?

Cita:
Iniciado por amchacon Ver Mensaje
Mala idea, el código de las STL está probado, libre de bugs y optimizado a más no poder. Pero el tuyo no, es muy fácil que te salga un memory leak y acabe siendo peor.
Como te dije antes, existes herramientas para detectar memory leaks, segmentation fault, etc...

Y STL no esta libre de bugs, solo checa el bug tracker https://gcc.gnu.org/bugzilla/buglist...ormat=advanced

Mira el motor de quake engine 3, no usan stl. Principalmente porque saben que están haciendo.

Cita:
Iniciado por amchacon Ver Mensaje
También puedes hacer algo combinado y es crear los elementos dinámicamente con unique_ptr:
http://www.cplusplus.com/reference/memory/unique_ptr/

De esa forma, tu decides cuando haces "delete" en el objeto. Pero si se te olvidara ya lo hace el unique_ptr por defecto (ojo, el unique_ptr es para elementos individuales, para arreglos hay que usar la STL array).
Posiblemente le ayude, en otros escenarios. Pero en un mapa usualmente solo lo cargas al iniciar y lo eliminas al salir. Y si usas stack en lugar de heap no ocupas liberar la memoria.