将宏重写为c++函数

Rewrite macro as c++ function?

本文关键字:c++ 函数 重写      更新时间:2023-10-16

我想把这个宏重写为c++函数。

#define SAFE_BUFFER_DELETE(buf)     { if(buf != NULL) { buffer_delete(buf); buf = NULL; } }

附加信息http://paste.ubuntu.com/13940691/abot.header文件

    void buffer_read(LPBUFFER buffer, void * buf, int bytes) {
        thecore_memcpy(buf, buffer->read_point, bytes);
        buffer_read_proceed(buffer, bytes);
    }
void buffer_delete(LPBUFFER buffer) {
    if (buffer == NULL) {
        return;
    }
    buffer_reset(buffer);
    int size = buffer->mem_size;
    int pool_index = buffer_get_exac_pool_index(size);
    if (pool_index >= 0) {
        BUFFER** buffer_pool = normalized_buffer_pool + pool_index;
        buffer->next = *buffer_pool;
        *buffer_pool = buffer;
    } else {
        free(buffer->mem_data);
        free(buffer);
    }
}

通过查看buffer_delete的源代码,可以明显看出对if (buf != NULL)的检查是完全多余的。所以把它扔掉。

一旦完成,宏将执行两件事。

  • 根据其参数调用buffer_delete
  • NULL分配给其参数

如何做函数中的第一件事是清楚的。在C++中,函数也可以接受参数作为引用,因此可以对其进行修改。

inline void
safe_delete_buffer(LPBUFFER& buf)
{
  buffer_delete(buf);
  buf = nullptr;
}

我假设LPBUFFER是某个指针类型的typedef

这种功能的行为对用户来说是否有用和直观是另一个问题。