Каковы причины переопределения оператора new и delete для определенного класса? - PullRequest
3 голосов
/ 05 декабря 2011

Операторы динамического выделения памяти - new и delete могут быть переопределены для определенного класса.Я мог бы определить схему распределения памяти, отличную от схемы по умолчанию, которая предоставляется средой выполнения C ++ в Windows.У меня есть несколько вопросов, связанных с этим:

  1. Переопределяет ли оператор new и delete для переносимого конкретного класса такой, что он также работает в Unix?Является ли это частью стандарта C ++?

  2. В каких случаях может потребоваться переопределить операторы выделения памяти для определенного класса?Единственный случай, о котором я мог подумать - отслеживание выделения памяти для утечек.

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

Если вам нужно автоматически использовать другую память, например, пул памяти или разделяемую память.

И ... множество других причин: Почему бы заменить по умолчанию новые и удалить операторы?

1 голос
/ 05 декабря 2011

Да, он переносимый, но имейте в виду, что компиляторы MS обрабатывают его "nothrow", который отличается от стандарта ANSI - на этом все горело.

Что касается того, почему, да, отслеживание памяти, отслеживание утечек, распределение отслеживания - это хорошо, но это можно сделать глобально. Вы можете переопределить new / delete для чего-то вроде распределения VRAM, но я обычно вижу подобные вещи, вызываемые в разных функциях. Основная причина переопределения new / delete заключается в том, что вы лучше понимаете, как будет использоваться ваша система памяти, и сможете адаптировать свои функции более эффективно, чем отличные, но универсальные версии new / delete, предоставляемые вашим поставщиком. Распределение небольших объектов приходит на ум как нечто, что часто упускается из виду или плохо реализуется, а также то, сколько информации вы хотите передать с выделениями для целей отладки.

0 голосов
/ 05 декабря 2011

Если вы хотите выровнять адресатов необычным способом.например, несколько раз назад я адресую 8 и использую последние три бита для других целей

, если вы хотите найти новые экземпляры класса в предварительно инициализированной памяти.Например, если вы хотите добавить новый узел в список из списка пустых узлов.

...