Це static_assert
можна використовувати для заборони використання delete
ключового слова таким чином:
#define delete static_assert(0, "The keyword \"delete\" is forbidden.");
Кожен сучасний розробник C ++ може захотіти зробити це, якщо він хоче використовувати консервативний збірник сміття, використовуючи лише класні es та структури , які перевантажують оператора новим, щоб викликати функцію, що виділяє пам'ять на консервативну купу консервативного сміттєзбірника, який можна ініціалізувати та інстанціювати, викликаючи деяку функцію, яка робить це на початку main
функції.
Наприклад, кожен сучасний розробник C ++, який хоче використовувати консервативний сміттєзбірник Boehm-Demers-Weiser, на початку main
функції напише:
GC_init();
І в кожному class
і struct
перевантажуйте operator new
так:
void* operator new(size_t size)
{
return GC_malloc(size);
}
А тепер, коли operator delete
це вже не потрібно, тому що консервативний сміттєзбірник Boehm-Demers-Weiser несе відповідальність як за безкоштовний, так і за розміщення кожного блоку пам'яті, коли він більше не потрібен, розробник хоче заборонити delete
ключове слово.
Один із способів - це перевантаження delete operator
таким чином:
void operator delete(void* ptr)
{
assert(0);
}
Але це не рекомендується, оскільки сучасний розробник C ++ буде знати, що він / вона помилково викликав час delete operator
запуску, але це краще знати це незабаром під час компіляції.
Тож найкращим рішенням цього сценарію, на мою думку, є використання такого, static_assert
як показано на початку цієї відповіді.
Звичайно, це можна зробити і за допомогою BOOST_STATIC_ASSERT
, але я вважаю, що static_assert
це краще і слід віддавати перевагу завжди.