2 votes

polymorphic_allocator : comment changer la ressource mémoire d'un conteneur

Supposons que j'ai un std::pmr::vector de int déjà utilisé. Il est déjà initialisé et contient N éléments (l'important est que N soit supérieur à 0). Sous le capot, il utilise la ressource mémoire M1 .
Jusqu'à présent, tout va bien. Il fonctionne, je peux le comparer avec un autre vecteur d'entiers qui utilise une ressource mémoire complètement différente et ainsi de suite avec toutes les autres choses fantastiques qu'un allocateur polymorphe a à offrir.

Je souhaite maintenant modifier la ressource mémoire sous-jacente de mon vecteur (en mettant de côté tous les inconvénients possibles en termes de performances ou autres).

Quelque chose comme ça :

template<typename MR>
void setMemoryResource(MR *resource) {
    // ... ??
}

Comment puis-je le gérer pour que tous les éléments soient encore présents après l'opération ?
Je demande cela car ni le conteneur ni l'allocateur n'ont de méthode pour définir une ressource mémoire différente. C'est pourquoi je me demande même si c'est possible.
Je peux imaginer quelques façons de le faire, mais aucune ne semble idiomatique. En fait, elles ressemblent toutes à un moyen délicat de contourner un trou dans l'API.

Je suis sûr qu'il me manque quelque chose de fondamental et que c'est probablement aussi simple qu'un devoir. Ai-je tort ?

4voto

T.C. Points 22510

Il n'y a pas de moyen facile. Il est prévu que vous ne puissiez pas modifier la ressource mémoire associée à un conteneur pendant sa durée de vie. Vous pouvez faire un nouveau avec la ressource mémoire souhaitée en utilisant le constructeur de copie/déplacement étendu à l'allocateur, mais sans modifier la ressource mémoire des conteneurs existants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X