【发布时间】:2019-11-20 13:23:45
【问题描述】:
我有一个关于智能指针和原始指针的问题。
我的第一个想法是使用原始指针:所以如果在一个类(例如类 Routes)中它的属性是 map<string, list<Route *>> _mapIATA 和 map<int, list<Route*>> _mapID,我将不得不在类中实现一个销毁器、一个副本和一个 operator=方法,我错了吗?
但是,如果我不使用原始指针,而是使用智能指针,我就不必担心删除指向的内容,但是复制和分配呢?
目前,我不确定什么会更好;原始或智能指针。
谢谢!
【问题讨论】:
-
std::unique_ptr的开销可能比原始指针少。使用节点的就地构造可能可以防止复制和分配,例如std::list<T,Allocator>::emplace_back. -
关于某物列表的地图,
std::multi_map也可能是一个替代方案。 -
我确实考虑过使用 multi_map,但为了程序的目的,最好使用地图和列表。
-
你写的地方我可能会复制相同的路线20次......。这是否意味着
Route的同一个实例可以出现在多个map条目中,甚至可能在一个列表中出现多次?在这种情况下,我更喜欢std::shared_ptr(无论其额外费用如何)。在我开始使用智能指针之前,我曾与太多不稳定的应用程序作斗争。另一个解决方案(我之前尝试过)可能是一个全局向量(或映射),用于存储所有Routes 和索引引用(而不是原始指针),至少允许检测丢失的实例......
标签: c++ dictionary pointers copy smart-pointers