Министерство цифровых информационных технологий и коммуникаций республики узбекистан каршинский филиал ташкентского университета информационных технологий


Download 98.86 Kb.
bet4/11
Sana18.11.2023
Hajmi98.86 Kb.
#1785551
TuriСамостоятельная работа
1   2   3   4   5   6   7   8   9   10   11
Bog'liq
5-mus

void* operator new(std::size_t size, const std::nothrow_t& nth)
{
// ...
}

также подменит стандартную, но потенциальных проблем будет меньше, потому что не выбрасывающего исключений оператор new используется редко. Но стандартная форма также недоступна.
Такая же ситуация с функциями для массивов.
Перегрузка операторов new/delete в глобальном пространстве имен настоятельно не рекомендуется.
Перегрузка операторов new/delete в классе лишена описанных выше недостатков. Перегрузка действует только при создании и удалении экземпляров соответствующего класса независимо от контекста вызова операторов new/delete. При реализации пользовательских функций выделения и освобождения памяти с помощью оператора :: можно получить доступ к соответствующим стандартным функциям. Рассмотрим пример.
class X
{
// ...
public:
void* operator new(std::size_t size)
{
std::cout << "X new\n";
return ::operator new(size);
}


void operator delete(void* ptr)
{
std::cout << "X delete\n";
::operator delete(ptr);
}


void* operator new[](std::size_t size)
{
std::cout << "X new[]\n";
return ::operator new[](size);
}


void operator delete[](void* ptr)
{
std::cout << "X delete[]\n";
::operator delete[](ptr);
}
};

В этом примере к стандартным операциям просто добавляется трассировка. Теперь в выражениях new X() и new X[N] будут использоваться эти функции для выделения и освобождения памяти.

Эти функции формально являются статическими, и их можно объявлять как static. Но по существу они являются экземплярными, с вызова функции operator new() начинается создание экземпляра, а вызов функции operator delete() завершает его удаление. Эти функции никогда не вызываются для других задач. Более того, как будет показано ниже, функция operator delete() по существу является виртуальной. Так что правильнее объявлять их без static.
Шаблоны функций -– это обобщенное описание поведения функций, которые могут вызываться для объектов разных типов. Другими словами, шаблон функции (шаблонная функция, обобщённая функция) представляет собой семейство разных функций (или описание алгоритма). По описанию шаблон функции похож на обычную функцию: разница в том, что некоторые элементы не определены (типы, константы) и являются параметризованными.

Шаблоны классов -– обобщенное описание пользовательского типа, в котором могут быть параметризованы атрибуты и операции типа. Представляют собой конструкции, по которым могут быть сгенерированы действительные классы путём подстановки вместо параметров конкретных аргументов.
Рассмотрим более подробно шаблоны функций.

Шаблоны функций

Как написать первую шаблонную функцию?
Рассмотрим случай определения минимального элемента из двух. В случае целых и действительных чисел придется написать 2 функции.



Download 98.86 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   11




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling