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