2011-08-04 340 views
4

我希望計算指針正在使用的次數。我有一張地圖:投射指向int的指針/存儲指向T的指針

static std::map<unsigned int, unsigned int> counters; 

當我要插入一個新值給它我使用這樣的:

template<class T> 
MyClass::addPointer(T * tPtr){ 
    counters[((unsigned int) tPtr)]++; 
} 

是否OK和安全的做這樣的投?這不是一個昂貴的操作等?

此外,這是一個合適的方式來確保每個指針只有一個計數?

感謝

+1

你見過Boost的'shared_ptr'嗎? (即將推出C++ 11) – Cameron

+3

是的,我正在實現類似的學習目的 – Freddie

+1

只要在64位系統上添加一個指針通常比'unsigned int'大。所以使用'void *'要好得多。 –

回答

3

IMO,你真的不需要它轉換爲unsigned int。你可以有mapvoid*

static std::map<void*, unsigned int> counters; 

而且空校驗這裏重要:

template<class T> 
MyClass::addPointer(T * tPtr){ 
    if(tPtr != 0) 
    counters[tPtr]++; 
} 

其餘部分都很好。

+0

這很好,謝謝。 – Freddie

1

我建議你應該讓另一個地圖,以避免投

map<const volatile void*, unsigned int> 
+1

+1適合考慮適當的簡歷資格。 ;-) –

0

如果您的編譯器支持C99/C++ 0x類型uintptr_t(在stdint.h/cstdint中定義),那是專門用於將指針值存儲爲整數的無符號整數類型。如前所述,除此之外,指針本身可以用作關鍵字。