2015-12-11 80 views
-3

我想重寫這個宏作爲一個C++函數。將宏重寫爲C++函數?

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

Additionl信息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); 
    } 
} 
+3

這樣做會阻止什麼? – 101010

+2

'buf'可以接受哪些類型? – 5gon12eder

+0

什麼是實際問題? –

回答

2

通過查看buffer_delete的源代碼,顯然,對於if (buf != NULL)檢查完全是多餘的。所以擺脫它。

一旦完成,宏就會做兩件事。

  • 呼叫buffer_delete其參
  • 分配NULL其說法

如何做一個函數的第一件事是明確的。在C++中,函數也可以接受參數作爲參考,因此可以修改它。你的功能看起來像這樣。

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

我假設LPBUFFER是一些指針類型typedef

這種功能的行爲是否對用戶有用且直觀是另一個問題。

+0

typedef struct buffer * LPBUFFER; 是的,這是一個typedef – user5546877