He estado escribiendo un archivo DLL de subprocesos múltiples para acceso a la base de datos utilizando ADO/ODBC para usar con una aplicación heredada. Necesito mantener múltiples conexiones de bases de datos para cada hilo, así que coloqué los objetos ADO para cada conexión en un objeto y pienso en mantener una matriz dentro de un objeto threadInfo personalizado. Obviamente, un vector serviría mejor aquí: necesito eliminar/reorganizar objetos sobre la marcha y un vector simplificaría eso. El problema es que estoy asignando un montón para cada hilo para evitar la contención del montón y esas cosas y asignar toda mi memoria desde allí.Poner un vector C++ como miembro en una clase que usa un grupo de memoria
Así que mi pregunta es: ¿cómo hago que el vector se asigne desde el montón específico de subprocesos? (O sabría internamente asignar memoria del mismo montón que su clase contenedora - suena improbable, pero no soy un tipo C++) He buscado en Google un poco y parece que podría necesitar escribir un asignador o algo así - que parece tanto trabajo que no quiero ¿Hay alguna otra manera? He oído que el vector usa la ubicación nueva para todas sus cosas internas, ¿así que se puede trabajar en la sobrecarga del operador nuevo?
Mi escaso conocimiento del interior de C++ no ayuda, ya que soy principalmente un programador de C (incluso eso, relativamente). Es muy posible que me esté perdiendo algo elemental en alguna parte. Si no aparece nada más fácil, podría ir y hacer lo de la matriz, pero ojalá no llegue a eso.
Estoy usando MS-VC++ 6.0 (hey, ¡es grosero reír! :-P).
Cualquier ayuda será muy apreciada.
Sí, ya me había topado con esto antes. Francamente, comenzaron con "no usar esto para sobrecargar nuevo [] ... no hay razón para usar un asignador en un código normal" y eso me desanimó. Comprobándolo de nuevo, ahora. Los objetos en el vector usarán el montón específico, sí. Ya me he asegurado de eso. No sabía sobre la plantilla de basic_string, ¡así que gracias! (Aunque aparte del vector, he tenido cuidado de mantener a todos los miembros como primitivos). Mientras tanto, ¡esperando a ver si aparece alguna otra respuesta! –
@ Deep-B: Supongo que tener que poner el objeto en un montón especial ya no cuenta como "código normal", así que eso no es un argumento en su caso. ':)' En cuanto a las cadenas en C++: Hay un 'typedef basic_string string' (dentro de namspace' std', o supuesto) en el encabezado '' de la biblioteca estándar. 'std :: basic_string' tiene dos parámetros de plantilla más que por defecto son' std :: char_traits 'y' std :: allocator '. Si 'typedef std :: basic_string , my_allocator > my_string_type' tienes algo similar a' std :: string', pero usando tu propio heap. –
sbi