假设我有一些unordered_map指向类实例的指针,从该映射中删除一个对象也会删除该实例?
(重写问题:)如果我想删除该实例,哪个版本是正确的?
if(it != map.end())
{
delete it->second;
map.erase(it);
}
Run Code Online (Sandbox Code Playgroud)
或者干脆
if(it != map.end())
map.erase(it);
Run Code Online (Sandbox Code Playgroud)
?
更新:正如许多人所建议的那样,我开始使用shared_ptr它,效果很好!
use*_*267 17
不,因为这是标记的C++ 11,你应该首先使用std::unique_ptr/ std::shared_ptr来管理你的对象指针,例如
std::unordered_map<std::string, std::unique_ptr<myClass>>
Run Code Online (Sandbox Code Playgroud)
即使你delete在任何调用之前虔诚地确保你的指针是d erase,你仍然必须考虑在发生异常时会发生什么,或者如果你将其他东西分配给相同的密钥,或者任何其他可能的可能性泄漏.除非你有一个很好的理由来使用new和delete,不要; 坚持std::unique_ptr/ std::shared_ptr和std::make_unique/ std::make_shared,它更安全,使您的代码更容易阅读.
| 归档时间: |
|
| 查看次数: |
1262 次 |
| 最近记录: |