2013-02-23 61 views
1

當無效指針或智能指針被解除引用時,代碼崩潰。添加斷言以幫助查找問題。例如,如何自動添加指針解引用的保護措施?

Type* p = NULL; // Always initilize to be null. 
assert(p); // Add before dereferencing to help to find the problem. 
p->f(); // Crashes if p is invalid. 

我的問題是如何解引用指針時自動添加斷言。例如,

#define PTR_RUN(p, f) assert(p); p->f; 

這有效,但不易讀,可能會有一些隱藏的問題,因爲不小心使用了宏。有更好的方法嗎?謝謝。

回答

2

或者可能是值得使用某種以某種拋出異常智能指針案件?

1

一般人寫的,

if (p) p->f 

p && p->f 

使用短路和運營商

+0

他們是不同的。如果你的情況,p可以是有效的或無效的。這兩種情況都必須在包含函數中處理。在我的情況下,p被斷言總是有效的。斷言用於查找代碼錯誤。 – user1899020 2013-02-23 18:21:52

+1

@ user1899020一個不會簡單地檢測到無效的非NULL指針。 – 2013-02-23 18:23:14

1

您可能會重載運算符->給定類型,並可能在其中添加斷言函數。我從來沒有這樣做,但它可能工作。

+1

嘗試過但沒有工作。要運行'operator - >()'函數,指針必須是有效的。因此它在檢查'operator - >()'中的指針有效性之前崩潰。 – user1899020 2013-02-23 19:36:20

+0

是啊,真的.... – Adi 2013-02-25 08:32:42