2. tnetbuffer.h m_pResolver->GetSize(strValue) 可以改进.
3. TRefAttributeSet类不能Put入键值相同的两个TAttributeSet或者TRefAttributeSet对象.
4. TVarArray的析构函数最好加上if(m_pArray!=NULL)和if(m_pUBounds!=NULL)的条件.
5.
tattribute.cpp
TAttribute::TAttribute(const IString &strAttrID, const TVarObject &varObj)
XNew(pVar, TVarObject(varObj));
m_Values.Append(pVar); //失败时只会返回NULL, 不会throw出Exception
有可能出现XNew(pVar, TVarObject(varObj));成功 但然后m_Values.Append(pVar)失败的情况,
这样pVar的内存无法释放, 虽然可能性不是很大, 但毕竟是有可能出现的.
void TAttribute::Clone(const TAttribute &right)里有同一处.
tattrliststrategy.cpp
TAttribute &TAttrListStrategy::Put(const IString &strAttrID, TVarObject *varObj, bool bAllowDup)
53行: XNew(pAttribute, TAttribute(strAttrID, varObj));
attr = m_Attributes.Append(pAttribute);
tattrarraystrategy.cpp
TAttribute & TAttrArrayStrategy::Put(const IString &strAttrID, TVarObject *varObj, bool bAllowDup)
50行: XNew(pAttribute, TAttribute(strAttrID, varObj));
m_Attributes.push_back(pAttribute);
应当改为:
XNew(pAttribute, TAttribute(strAttrID, varObj));
try{
m_Attributes.push_back(pAttribute);
}catch()
{
delete pAttribute;
throw ...
}
tattrhashstrategy.cpp
TAttribute &TAttrHashStrategy::Put(const IString &strAttrID, TVarObject *varObj, bool bAllowDup)
58行: XNew(pAttr, TAttribute(strAttrID, varObj));
m_Container->Store(strAttrID, pAttr);
应当改为:
XNew(pAttr, TAttribute(strAttrID, varObj));
if( m_Container->Store(strAttrID, pAttr)==false )
{
delete pAttr;
throw ...
}
thashmap.h
193行: pNode = new THashNode
之后最好判断pNode!=NULL
tnetbuffer.cpp
86行: void *tmp = new char[nLen];
319行:
void *pData = new char[nNewSize];
后面最好加pData!=NULL的判断.
6. TAttributeSet put的时侯除非使用TAttribute &Put(const IString &strAttrID, TVarObject *varObj)接口,
否则一定都要new两次TVarObject对象, clone操作造成了内存复制开销, 在put比较大的string或者另一个
attributeset时问题较严重.