2011-08-04 338 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中定义),那是专门用于将指针值存储为整数的无符号整数类型。如前所述,除此之外,指针本身可以用作关键字。