Ho scritto una DLL multi-thread per l'accesso al database utilizzando ADO/ODBC per l'utilizzo con un'applicazione legacy. Ho bisogno di mantenere più connessioni al database per ogni thread, quindi ho messo gli oggetti ADO per ogni connessione in un oggetto e sto pensando di mantenerne una matrice all'interno di un oggetto threadInfo personalizzato. Ovviamente un vettore servirebbe meglio qui - ho bisogno di cancellare/riorganizzare gli oggetti in movimento e un vettore lo semplificherebbe. Il problema è che sto allocando un heap per ogni thread per evitare conflitti e problemi di heap e allocare tutta la mia memoria da lì.Inserimento di un vettore C++ come membro in una classe che utilizza un pool di memoria
Quindi la mia domanda è: come faccio ad allocare il vettore dall'heap specifico del thread? (O saprebbe internamente di allocare memoria dallo stesso heap della sua classe di wrapper - sembra improbabile, ma io non sono un ragazzo C++) Ho cercato un po 'su google e sembra che potrei aver bisogno di scrivere un allocatore o qualcosa del genere - che sembra così tanto lavoro che non voglio C'è un altro modo? Ho sentito che il vettore usa il posizionamento - nuovo per tutte le sue cose all'interno, quindi può essere utilizzato da un operatore di overloading?
La mia scarsa conoscenza degli interni di C++ non aiuta, visto che sono principalmente un programmatore C (anche quello - relativamente). È molto probabile che mi manchi qualcosa di elementare da qualche parte. Se non succede nulla di più semplice - potrei semplicemente andare a fare la cosa dell'array, ma spero che non arriverà a quello.
Sto usando MS-VC++ 6.0 (ehi, è scortese ridere! :-P).
Qualsiasi/tutto l'aiuto sarà molto apprezzato.
Sì, ci avrei pensato prima. Francamente hanno iniziato con "non usare questo per sovraccaricare nuovo [] ... non c'è motivo di usare un allocatore in un normale codice" e questo mi ha messo fuori gioco. Controllandolo di nuovo, ora. Gli oggetti nel vettore utilizzeranno l'heap specifico, sì. Mi sono già assicurato di questo. Non conoscevo il template di basic_string, quindi grazie! (Anche se a parte il vettore sono stato attento a mantenere tutti i membri come primitivi.) Nel frattempo, in attesa di vedere se arriva un'altra risposta! –
@ Deep-B: Immagino che dover mettere un oggetto su un heap speciale non contenga più il "codice normale", quindi non è un argomento nel tuo caso. ':)' Come per le stringhe in C++: C'è una stringa typedef basic_string (all'interno di namspace 'std', o course) nell'intestazione' 'della libreria standard. 'std :: basic_string' ha altri due parametri di modello che sono predefiniti a' std :: char_traits 'e' std :: allocator '. Se si 'typedef std :: basic_string , my_allocator > my_string_type' si ha qualcosa di simile a' std :: string', ma si utilizza il proprio heap. –
sbi