2

我很难理解以下代码:

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;以及为什么inlinefunc in struct?谁能帮我学习这些代码?这是代码地址

4

1 回答 1

2

注意.cpp扩展名。这是C++代码。

  1. operator ... = delete语法说应该禁止该运算符,如果您尝试使用它,则会生成编译器警告。

  2. 限定符是一种inline性能优化。引用C++ 编程语言

    说明inline符是对编译器的提示,它应该尝试为内联调用[函数]生成代码,而不是为函数放置一次代码,然后通过通常的函数调用机制进行调用。

    如果 (a) 函数很小;(b) 性能是最重要的问题,您可以使用inline限定符,以便编译器有效地将函数的代码插入到您使用它的任何位置,而不是将其保存为函数并按照通常的方式调用它。这节省了调用函数的适度开销。

如果您在理解 C++ 方面需要帮助,我建议您查看这些资源

于 2019-02-15T17:54:09.663 回答