Совместное использование smart_pointer и set_new_handler - PullRequest
2 голосов
/ 15 августа 2011

Нужно ли беспокоиться об использовании set_new_handlers в сочетании с умными или автоматическими указателями, или библиотеки поставляются с обработчиками с улучшенной обработкой ошибок?

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 августа 2011

Интеллектуальные указатели, поставляемые с C ++ (в настоящее время это просто auto_ptr, но вскоре включая shared_ptr и weak_ptr), по умолчанию используют new, поэтому они автоматически взаимодействуют с глобальным новым обработчиком. Вам не нужно делать ничего особенного, чтобы гарантировать, что новый обработчик вызывается при использовании этих классов.

Надеюсь, это поможет!

2 голосов
/ 15 августа 2011

Я думаю, вы беспокоитесь о не связанных вещах.Новый обработчик - это деталь, которая определяет, как operator new работает в случае, если ему не удается найти достаточно памяти для выделения.Интеллектуальный указатель - это предоставляемый библиотекой контейнерный класс.Большинству контейнеров стандартной библиотеки C ++ необходимо выделять память, что они делают модульно с помощью класса распределителя.Распределитель по умолчанию может (и обычно делает) использовать new для получения памяти, но процесс выделения памяти и построения объекта не связан, и в любом классе библиотеки нет ничего, что могло бы знать какие-либо подробности о том, как работает оператор newи наоборот.

Так что, что бы вы ни делали со своим оператором new (например, устанавливая обработчики), будет прозрачно работать для стандартных конструкций библиотеки, и ни одна из сторон не должна знать о другой.

...