peakzhang 发表于 2008-9-20 15:42:29

如何使用标准库存储自定义类,存储自定义类指针

我们想使用标准库来对自己定义的类来操作,比如list,map ,vector,我定义了新的类
myclass,我想用
typedef std::list<myclass> ;
typedef std::vector<myclass> ;
typedef std::map <char*,myclass> T_applCfg_Map;
这样使用好?还是用类指针存储好?
typedef std::list<myclass*> ;
typedef std::vector<myclass*> ;
typedef std::map <char*,myclass*> T_applCfg_Map;
请高手提供实际经验中的使用。谢谢。

peakzhang 发表于 2008-9-20 15:42:36

我的经验:
其实没有固定的模式,有的时候,用对象合适,有的时候,用对象的指针合适。
在你存储的信息内容,不需要怎么更改的时候,用对象舒服,因为生存期由STL控制了。如果需要频繁更改容器中的数据,用指针更好,避免对象复制的消耗,性能更优秀。
但各中细节,请自己写程序慢慢体会吧。

peakzhang 发表于 2008-9-20 15:42:46

如果不存在成本非常高的constructor & destructor的话,尽量用对象的方式.

否则参考使用smart_ptr作为wrapper放入container中.

peakzhang 发表于 2008-9-20 15:42:54

否则参考使用smart_ptr作为wrapper放入container中.
I can smell core dump here. It's more complex than you thought to
put a smart pointer into a container. I never put std::auto_ptr into
stl::container, jus my .02.

木头人 发表于 2010-2-9 23:14:17

感觉因为constructor & destructor 的原因而从而选择实体或指针的原因感觉不多, 因为今天代入没有构造代价的struct 作为容器typename, 明天说不定也要为该struct 增加constructor.

使用实体的话, 我觉得有一个好处就是在多线程中可以使用粒度更加小的锁, 因为你只需要对取值函数内部上锁就够了,指针的话你起码要把指针的逻辑跑完才能解锁.
虽然使用实体增加了对 construct 和 destructor的成本, 但锁的范围变小了,性能也随着提高了. 毕竟现在的CPU核心越来越多了, 别让它们闲着性能才能上去.

如果业务处理是单线的话, 其实还是建议使用原始指针, 毕竟不需考虑锁的问题.

智能指针使用得当的话, 在多线程下, 可以实现和实体一样的锁操作粒度, 近乎原始指针的效率, 而且还不需要进行二元操作.
但只是对习惯用继承, 派生, 子类与父类之间强制转换来说, 又要从智能指针中取出原始指针作转换, 如果转换后要外送到下层逻辑进行处理又要对原始指针进行上锁, 和使用原始指针的初衷相背, 一点也不kiss, 一点也不爽. 智能指针的使用还是见仁见智吧.

不过智能指针还有一个不得不提的好处( 至少我认为是= = ), 在大量使用智能智针时, 会显现一些原始智针不会显现的问题, 通常是架构分层不清晰导致, 可以借此修正一下架构分层.

[ 本帖最后由 木头人 于 2010-2-9 23:47 编辑 ]
页: [1]
查看完整版本: 如何使用标准库存储自定义类,存储自定义类指针