что означает этот код из libdispatch (apple-open-source)? - PullRequest
0 голосов
/ 13 февраля 2019

Мне трудно понять следующий код:

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 Ответ

0 голосов
/ 15 февраля 2019

Обратите внимание на расширение .cpp.Это код C ++ .

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

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

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

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

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

...