将指针转换为int / Storing指针以键入T

时间:2011-08-04 13:40:38

标签: c++ templates pointers casting

我希望计算指针的使用次数。我有一张地图:

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

当我想向其插入新值时,我正在使用它:

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

这样的演员阵容可以安全吗?这不是一项昂贵的操作等等吗?

另外,这是一种确保每个指针只有一个计数的合适方法吗?

由于

3 个答案:

答案 0 :(得分:3)

IMO,你真的不需要把它投射到unsigned int。您可以将mapvoid*

放在一起
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中定义),那么这是无符号整数类型,专门用于将指针值存储为整数。

否则,指针可以用作键本身,如上所述。