在映射中插入对指针的引用
Insert reference to pointer into an map
struct A
{
};
int main()
{
A *a = new A;
std::unordered_map<int, A*&> hash;
hash.insert(make_pair(1, a)); //error
}
使这项工作的语法是什么?
如果我这样做:
a = new A;
我希望hashmap
指向新对象。
hash.insert(std::p air
在您的
示例中,std::make_pair
的返回类型是std::pair<int, A*>
而不是std::pair<int, A*&>
(由于模板参数推导(。
这确实可以解决问题:
hash.insert(std::make_pair<int, A*&>(1, a)); //no error
请注意,存储对地图和其他数据结构的引用并不常见。想想你是否真的需要它。
这个问题忽略了STL设计中固有的价值语义。
价值语义意味着
值被存储并复制到容器(包括指针(中,而不是引用中。
当您将某些内容插入容器时,即使您传入的是引用变量,也会创建并存储副本。
这意味着你不能有像 std::vector<> 这样的引用结构。
在您的特定示例中,省略引用符号 (&(,您没问题(除了内存泄漏(。在 stl 中存储指针很便宜,因此您不必担心复制指针的成本。
但是,与C++一样,您必须关注清理(如果您不使用智能指针(和对象生存期。
相关文章:
- 如何使用基类指针引用派生类成员
- 将常量指针引用绑定到非常量指针
- 如果非动态变量被指针引用,何时超出范围?
- 转换指针引用的字符串
- 指针引用的生存期(以 C++为单位)
- 从 unique_ptr::get 发送指针作为指针引用进入函数
- 指针/引用的 CLion 格式
- 使用模板专用化来比较指针引用
- 如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制
- C++初始化指针/引用/复制细微差别
- 用数组或指针引用函数?
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 强制转换为指针引用是否会导致未定义的行为
- 访问由 void 指针引用的结构的成员
- C 为什么当先前的步骤引发异常时,std :: shared_ptr的指针引用会被破坏
- 动态指针引用数组由三元运算符返回值,但有异常
- 悬空指向 int 和 char* 常量的指针/引用
- C++ 二维数组和指针引用
- 通过使用指针/引用,在C++中使用向量加快计算速度
- C++非类型模板模板到函数指针/引用