Si tengo un objeto de C++ creada en el hilo principal, y luego iniciar otro hilo, y desde ese hilo que llamo una función miembro pública del objeto que he creado, lo que pasa?
Depende de la vida útil del objeto.
Si el objeto se crea en heap (memoria dinámica usando new
), el otro subproceso accederá a los miembros del objeto correctamente (suponiendo que no existan condiciones de carrera) a menos que el tiempo de vida del objeto termine llamando al delete
en el primer subproceso.
Si el objeto se crea en la pila (localmente) en el primer subproceso, tendrá un * Comportamiento no definido * si la duración del objeto creado finalizó antes de accederse en el segundo subproceso.
¿Por qué puede acceder al objeto en la pila en el segundo hilo?
Cada hilo tiene su propia pila ya menos que el objeto creado en la pila de hilo es válida y vivo Usted estaría intentando acceder a una ubicación de dirección, que no apunta a ningún objeto válido en segundo hilo.
Tenga en cuenta que cada proceso tiene un espacio de direcciones y todos los hilos en el mismo proceso comparten el mismo espacio de direcciones, por lo que se puede acceder a la dirección de la variable en el segundo hilo. Sin embargo, debe asegurarse de que la dirección contenga un objeto válido.
¿Es diferente si la función pública tiene parámetros o si manipula miembros de objetos privados?
Especificadores de acceso y subprocesamiento múltiple no están relacionados en absoluto.
Se aplican las mismas reglas de especificador de acceso en todos los hilos.
¿Se comporta de manera diferente en windows, linux o mac os?
La respuesta a #1
está garantizada en todos los sistemas operativos.
Si creé el objeto en el montón, ¿hay alguna manera simple de eliminar el objeto cuando sale el último? – neckTwi