J'ai écrit une DLL multithread pour l'accès à la base de données en utilisant ADO/ODBC pour une utilisation avec une application héritée. J'ai besoin de garder plusieurs connexions de base de données pour chaque thread, donc j'ai mis les objets ADO pour chaque connexion dans un objet et pense à en conserver un tableau dans un objet threadInfo personnalisé. Évidemment, un vecteur servirait mieux ici - j'ai besoin de supprimer/réorganiser des objets sur le pouce et un vecteur simplifierait cela. Le problème est, j'alloue un tas pour chaque thread pour éviter les conflits de tas et les choses et d'allouer toute ma mémoire à partir de là. Donc, ma question est: comment puis-je faire le vecteur allouer à partir du tas spécifique au fil? (Ou sait-il en interne d'allouer de la mémoire du même tas que sa classe wrapper - cela semble improbable, mais je ne suis pas un gars C++) J'ai cherché un peu sur google et il me semble que je devrais écrire un allocateur ou quelque chose ce qui ressemble à tellement de travail que je ne veux pas. Est-ce qu'il y a un autre moyen? J'ai entendu dire que le vecteur utilise le placement-nouveau pour tous ses trucs à l'intérieur, donc peut-on travailler sur l'opérateur de surcharge?Création d'un vecteur C++ en tant que membre d'une classe utilisant un pool de mémoire
Ma connaissance insuffisante de l'intérieur de C++ n'aide pas, vu que je suis principalement un programmeur C (même que - relativement). C'est très possible qu'il me manque quelque chose d'élémentaire quelque part. Si rien de plus facile ne se présente, j'irai peut-être faire le tableau, mais j'espère que cela ne viendra pas. J'utilise MS-VC++ 6.0 (hé, c'est impoli de rire! :-P).
Toute aide sera grandement appréciée. Comment puis-je attribuer le vecteur à partir du tas spécifique au thread?
Oui, je viendrais là avant. Franchement, ils ont commencé par «ne pas utiliser cela pour surcharger de nouveaux [...] ... il n'y a aucune raison d'utiliser un allocateur dans un code normal» et cela m'a un peu rebuté. Vérification à nouveau, maintenant. Les objets du vecteur utiliseront le tas spécifique, ouais. Je m'en suis déjà assuré. Je ne connaissais pas le modèle de basic_string, alors merci! (Mais en dehors du vecteur, j'ai pris soin de garder tous les membres comme des primitifs.) En attendant, attendez de voir si d'autres réponses se présentent! –
@ Deep-B: Je suppose que devoir mettre un objet sur un tas spécial ne compte plus comme du "code normal", donc ce n'est pas un argument dans votre cas. ':)' Comme pour les chaînes en C++: Il existe une chaîne typedef basic_string (dans l'espace namspace 'std', ou bien sûr) dans l'en-tête' ' de la bibliothèque standard. 'std :: basic_string' a deux autres paramètres de template qui sont par défaut' std :: char_traits 'et' std :: allocator '. Si vous 'typedef std :: basic_string , mon_allocateur > my_string_type' vous avez quelque chose de similaire à 'std :: string', mais en utilisant votre propre tas. –
sbi