- 主题:以下代码中,try catch 是否有必要存在?
不是说类的虚构函数不应该抛出异常,所以这个try catch 好像没必要吧
class WTSObject
{
public:
WTSObject() :m_uRefs(1){}
virtual ~WTSObject(){}
public:
inline uint32_t retain(){ return m_uRefs.fetch_add(1) + 1; }
virtual void release()
{
if (m_uRefs == 0)
return;
try
{
uint32_t cnt = m_uRefs.fetch_sub(1);
if (cnt == 1)
{
delete this;
}
}
catch(...)
{
}
}
inline bool isSingleRefs() { return m_uRefs == 1; }
inline uint32_t retainCount() { return m_uRefs; }
protected:
volatile std::atomic<uint32_t> m_uRefs;
};
--
FROM 14.127.25.*
这就是滥用try{}catch(...)
volatile也是多余的
m_uRefs == 0应该是一个assert,而不是if语句。
assert(m_uRefs != 0)
我咋感觉这个类似的问题以前有人发过帖子
--
FROM 111.199.149.*
测试了一下,发现这种靠引用计数 来减少对象复制,压根儿提升不了执行速度,我的场景是从文件读取消息记录,再分发到各个 消费线程,发现远不如 直接把消息复制给各个线程,哪怕用上内存池,来减少new 和 delete,真不如栈里创建对象,在 aiso context post 复制出去。
我的消息结构二十多个个double/int 之类的结构体,这算不算大对象了,按直觉这应该减少了不少拷贝,能提升不少性能,结果慢了近2~3倍,唯一的好处是省了不少内存,因为消费线程是会缓存一段时间内的消息用于计算。
【 在 z16166 的大作中提到: 】
: 这就是滥用try{}catch(...)
: volatile也是多余的
: m_uRefs == 0应该是一个assert,而不是if语句。
: ...................
--
FROM 14.154.50.*
很容易弄一段简单代码对比测试这两种搞法的性能的,就能确定你说的性能差异是不是这两种搞法的差异导致的,还是代码里其他地方导致的。
【 在 Algoquant 的大作中提到: 】
: 测试了一下,发现这种靠引用计数 来减少对象复制,压根儿提升不了执行速度,我的场景是从文件读取消息记录,再分发到各个 消费线程,发现远不如 直接把消息复制给各个线程,哪怕用上内存池,来减少new 和 delete,真不如栈里创建对象,在 aiso context post 复制出去。
: 我的消息结构二十多个个double/int 之类的结构体,这算不算大对象了,按直觉这应该减少了不少拷贝,能提升不少性能,结果慢了近2~3倍,唯一的好处是省了不少内存,因为消费线程是会缓存一段时间内的消息用于计算。
:
--
FROM 221.218.167.*