Что означает этот код из 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++.

  1. operator ... = delete Синтаксис говорит, что этот оператор должен быть подавлен, генерируя предупреждение компилятора, если вы пытаетесь его использовать.

  2. inline квалификатор - это оптимизация производительности. Цитировать из языка программирования C++:

    inline спецификатор является подсказкой компилятору, что он должен попытаться сгенерировать код для вызова встроенной функции, вместо того, чтобы один раз записывать код для функции, а затем вызывать через обычный механизм вызова функции.

    Если (а) функция мала; и (б) производительность имеет первостепенное значение, вы можете использовать inline квалификатор, так что компилятор будет эффективно вставлять код функции, где бы вы его не использовали, а не сохранять ее как функцию и вызывать ее, как обычно. Это экономит скромные накладные расходы на вызов функции.

Если вам нужна помощь в понимании C++, я бы посоветовал вам ознакомиться с этими ресурсами.

Другие вопросы по тегам