2010-02-09 20 views
6

Me estoy moviendo de Java a C++ y realmente lo he disfrutado. Una cosa que no disfruto es no entender la memoria en absoluto porque Java solía hacer eso por mí.C++, Seg Faults y Memory Management

He comprado un libro: La memoria como un concepto de programación en C y C++ - Frantisek Franek

¿Hay algunos sitios buenos para mí ir y aprender de forma interactiva sobre C/C++ y el uso de memoria (tutoriales, foros , Grupos de Usuarios)?

+0

Esta discusión tiene una gran cantidad de información útil: http://stackoverflow.com/questions/395123/raii-and-smart-punteros-en-c – Manuel

+2

Wow. Pasar de Java a C++ y disfrutarlo. Estoy impresionado. – JesperE

+0

Bueno, pone énfasis en lo correcto, ya que comprender la gestión de recursos es (IMHO) absolutamente fundamental para ser un desarrollador competente de C++. –

Respuesta

2
+0

Excelente lista. Puedo agregar esto: http://www.parashift.com/c++-faq-lite/freestore-mgmt.html – Manuel

+0

+1 Algunos buenos artivles. –

+0

Awesome links. ¡Muchas gracias! – Stephano

5

La gestión de memoria es casi automática en C++ (con algunas advertencias).

La mayoría de las veces no dinámicamente asignar memoria.
Usa variables locales (y variables de miembros normales) y construirán y destruirán automáticamente.

Cuando necesite punteros utilice un puntero inteligente.
Comience con el uso de boost :: shared_pointer <T> en lugar de punteros.
Esto lo llevará por la ruta correcta y dejará de borrar accidentalmente la memoria en el momento equivocado y el 90% de su código se liberará correctamente (desafortunadamente los ciclos causarán un problema (en términos de fugas solamente) y necesitará diseñar en consecuencia (pero tenemos otros punteros inteligentes para hacer frente a los ciclos weak_ptr))

Mi regla fundamental es que una clase nunca contiene un puntero RAW. Siempre use alguna forma de contenedor estándar o un puntero inteligente. Usando estos; las llamadas al destructor se vuelven automáticas.

vez que tenga la sensación de inicio de leer sobre los otros punteros inteligentes y cuándo usarlos:

Smart Pointers: Or who owns you baby?

+0

+1, especialmente para "La mayoría de las veces no asigna dinámicamente memoria". –

+0

@Martin - por verdadero interés: ¿no está utilizando 'shared_ptr' en todas partes un poco lento? ¿Lo recomendarías, por ejemplo, para una simulación o un videojuego? – Manuel

+2

¿Qué te hace pensar que es lento? Pero no, no lo estoy recomendando para todos lados. Lo recomiendo como punto de partida para aprender sobre punteros inteligentes. Utilice el puntero inteligente correcto para resolver el problema en cuestión (pero debe comenzar en algún punto y los punteros inteligentes son un tema bastante amplio para saltar). PD. No tengo problemas con los punteros inteligentes en los simuladores (la corrección es el rey, optimízate después de mostrar que es un cuello de botella). –