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
это лучше и всегда следует отдавать предпочтение.