我希望计算指针的使用次数。我有一张地图:
static std::map<unsigned int, unsigned int> counters;
当我想向其插入新值时,我正在使用它:
template<class T>
MyClass::addPointer(T * tPtr){
counters[((unsigned int) tPtr)]++;
}
这样的演员阵容可以安全吗?这不是一项昂贵的操作等等吗?
另外,这是一种确保每个指针只有一个计数的合适方法吗?
由于
答案 0 :(得分:3)
IMO,你真的不需要把它投射到unsigned int
。您可以将map
与void*
:
static std::map<void*, unsigned int> counters;
此处的空检查非常重要:
template<class T>
MyClass::addPointer(T * tPtr){
if(tPtr != 0)
counters[tPtr]++;
}
休息很好。
答案 1 :(得分:1)
我建议你应该保留另一张地图以避免演员
map<const volatile void*, unsigned int>
答案 2 :(得分:0)
如果您的编译器支持C99 / C ++ 0x类型uintptr_t
(在stdint.h
/ cstdint
中定义),那么这是无符号整数类型,专门用于将指针值存储为整数。
否则,指针可以用作键本身,如上所述。