我有一个STL,类似于一个以指针作为键的映射的实现。正如我注意到的那样,地图不会释放钥匙。因为我不能保存对所有指针的引用,所以我无法亲自管理内存。我读到了一些关于智能指针的文章,提出了两个问题:
谢谢你的帮助。
发布于 2015-02-25 15:04:43
如果您在没有自定义比较器的std::map中使用智能指针作为键,那么它就无法工作,因为您根本不会用另一个对象替换一个对象,因为指向一个对象的指针不等同于另一个对象,并且不会发生替换。如果确实使用比较器,那么它仍然不会自动工作,因为键是一个常量,只有在替换映射中的项时才修改值。因此,我认为您有三种解决问题的方法(假设您确实使用了自定义比较器):
std::map,但在替换元素时先删除以前的键/值对并插入新对时,不要使用operator[]或分配给iterator->secondstd::map,但将智能指针和数据保存在value部件中,并从对象中复制密钥。replace方法。发布于 2015-02-25 14:44:30
您应该使用字符串而不是动态分配的char数组。字符串是自动管理内存。在动态分配的字符数组中使用shared_ptr是不方便的。shared_ptr很适合管理对象。
发布于 2015-02-25 14:46:12
据推测,键是指针所指向的对象中的东西,而不是指针本身。如果是这样,并且您不希望出于任何原因使用智能指针,则在删除map元素时,删除该对象。当地图被释放时,别忘了把它们全部删除。不要忘记处理复制构造函数和赋值操作符等。
https://stackoverflow.com/questions/28721802
复制相似问题