将指针强制转换为int类型/将指针存储为T类型
Casting a pointer to an int / Storing pointers to type T
我希望计算指针被使用的次数。我有一张地图:
static std::map<unsigned int, unsigned int> counters;
当我想插入一个新值给它时,我像这样使用它:
template<class T>
MyClass::addPointer(T * tPtr){
counters[((unsigned int) tPtr)]++;
}
这样的cast是OK和安全的吗?手术费用不高等等?
此外,这是一个合适的方式来确保每个指针只得到一个计数?
谢谢
依我看,你真的不需要将它强制转换为unsigned int
。您可以将map
与void*
结合:
static std::map<void*, unsigned int> counters;
null检查在这里也很重要:
template<class T>
MyClass::addPointer(T * tPtr){
if(tPtr != 0)
counters[tPtr]++;
}
我建议您保留另一个映射以避免强制转换
map<const volatile void*, unsigned int>
如果您的编译器支持C99/c++ 0x类型uintptr_t
(在stdint.h
/cstdint
中定义),这是专门用于将指针值存储为整数的无符号整数类型。
否则,指针本身可以用作键,如前所述。
相关文章:
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- (C )找到基本类型指针的儿童类型
- 表达式必须具有指向对象的指针类型(指针向量)
- 将子项复制构造到父类型指针中
- C 返回类型指针声明
- 调用虚拟函数而不通过类类型指针创建任何对象
- C++ 如何使用类类型指针制作向量
- 为什么基类型指针不能获取派生类对象的地址值?
- 如何在 C++ 中获取映射类型指针,映射
- 如何检查该类型的类型指针是正确对齐的
- 正在转换为短类型指针
- 指向任意类方法的模板非类型指针
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 指向shared_ptr的不透明类型 C 指针
- C++:从值类型指针强制转换为包含迭代器
- C/C++:访问给定类型指针的位置与访问另一类型指针的相同位置不同
- 比较类型指针
- 数据类型指针使用*(Datatype *)
- 如何打印c++中char类型指针的所有值