Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

surcharge de l'operateur new

2 réponses
Avatar
Dezz
Bonjour,

je commence à jeter un coup d'oeil à la surcharge de l'opérateur new (en
tant qu'opérateur de classe).

Et j'avoue qu'à part d'interdire l'allocation dans le tas et gérer les
problémes de mémoire, je n'ai pas trouvé d'autres utilités.
Quelqu'un peut-il me donner d'autres raisons de surcharger cet opérateur ?
Y a-t-il des exemples où la surcharge de cet opérateur est utilisé ?

Merci,
Dezz

2 réponses

Avatar
kanze
Dezz wrote:

je commence à jeter un coup d'oeil à la surcharge de
l'opérateur new (en tant qu'opérateur de classe).

Et j'avoue qu'à part d'interdire l'allocation dans le tas et
gérer les problémes de mémoire, je n'ai pas trouvé d'autres
utilités. Quelqu'un peut-il me donner d'autres raisons de
surcharger cet opérateur ? Y a-t-il des exemples où la
surcharge de cet opérateur est utilisé ?


La plupart du temps, c'est pour donner un allocateur optimisé au
type. Si la taille de l'allocation est constante et connue
d'avance, on peut faire beaucoup mieux que les allocateurs plus
générique.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
Brieuc Jeunhomme
Quelqu'un peut-il me donner d'autres raisons de
surcharger cet opérateur ? Y a-t-il des exemples où la
surcharge de cet opérateur est utilisé ?


La plupart du temps, c'est pour donner un allocateur optimisé au
type. Si la taille de l'allocation est constante et connue
d'avance, on peut faire beaucoup mieux que les allocateurs plus
générique.


Je m'en sers aussi pour deux autres raisons: la première, c'est pour
remplacer l'allocateur par quelque chose dont je connais le
fonctionnement, et dont je me sers d'une manière un peu crade pour
faire un garbage collector, la deuxième, c'est dans un programme multi
process, pour dire que les objets d'une certaine classe doivent
toujours être alloués en shared memory, tout simplement en la dérivant
d'une classe dont j'ai surchargé le new.

Ça peut servir en debug, pour avoir des traces de toutes les allocations
quand on est à la recherche de la mémoire perdue, bien qu'il y ait des
outils plus efficaces pour ça.

On pourrait aussi imaginer, bien que ce soit tordu, de se servir de
cette technique pour écrire dans un fichier mappé en mémoire, par
exemple si on doit y mettre plusieurs structures se suivant les unes
les autres.

Dernier exemple, si on veut par exemple lire un mot de passe et qu'on
veut la garantie que l'OS ne le swappera pas, on peut vouloir allouer
de la mémoire d'une manière particulière.

--
BBP