Что означает этот код из libdispatch (apple-open-source)?
Я с трудом понимаю следующий код:
struct dispatch_block_private_data_s {
DISPATCH_BLOCK_PRIVATE_DATA_HEADER();
static void* operator new(size_t) = delete;
static void* operator new [] (size_t) = delete;
explicit inline DISPATCH_ALWAYS_INLINE dispatch_block_private_data_s(
dispatch_block_flags_t flags, voucher_t voucher,
pthread_priority_t priority, dispatch_block_t block) noexcept :
dbpd_magic(), dbpd_flags(flags), dbpd_atomic_flags(),
dbpd_performed(), dbpd_priority(priority), dbpd_voucher(voucher),
dbpd_block(block), dbpd_group(), dbpd_queue(), dbpd_thread()
{
// stack structure constructor, no releases on destruction
_dispatch_block_private_data_debug("create, block: %p", dbpd_block);
}
};
Что такое static void* operator new(size_t) = delete;
и почему inline
Функ в struct
? Кто может помочь мне узнать с этим кодом? Вот кодовый адрес
1 ответ
Обратите внимание .cpp
расширение. Это код C++.
operator ... = delete
Синтаксис говорит, что этот оператор должен быть подавлен, генерируя предупреждение компилятора, если вы пытаетесь его использовать.inline
квалификатор - это оптимизация производительности. Цитировать из языка программирования C++:inline
спецификатор является подсказкой компилятору, что он должен попытаться сгенерировать код для вызова встроенной функции, вместо того, чтобы один раз записывать код для функции, а затем вызывать через обычный механизм вызова функции.Если (а) функция мала; и (б) производительность имеет первостепенное значение, вы можете использовать
inline
квалификатор, так что компилятор будет эффективно вставлять код функции, где бы вы его не использовали, а не сохранять ее как функцию и вызывать ее, как обычно. Это экономит скромные накладные расходы на вызов функции.
Если вам нужна помощь в понимании C++, я бы посоветовал вам ознакомиться с этими ресурсами.