`
wooce
  • 浏览: 184188 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

我对C++核心类库TAttributeSet在稳定性和效率优化上提出的comment

    博客分类:
  • C++
阅读更多
1.   -fnew-abi选项支持空基类优化.
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<TKey, TNode>( Key, Object );
        之后最好判断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时问题较严重.
1
0
分享到:
评论

相关推荐

    C++类库 类库 c++ C/C++ 类库

    STL的核心思想是泛型编程,使得代码可以应用于多种数据类型,提高了代码的可重用性和效率。 除了STL,C++还提供了标准库,例如iostream库,用于输入/输出操作,如cin和cout,方便进行文本交互;fstream库,用于文件...

    C++类库开发详解

    在C++编程中,类库开发是至关重要的一个环节,它允许程序员创建可重用的代码模块,提高软件开发的效率和质量。本教程“C++类库开发详解”将引领你深入理解如何构建和使用自己的C++类库。下面我们将详细探讨C++类库...

    VISUAL C++基础类库参考大全

    《Visual C++基础类库参考大全》是一本深入探讨Visual C++编程的宝贵资源,尤其对MFC(Microsoft Foundation Classes)框架的详细讲解是其核心价值所在。MFC是微软为Windows开发提供的一套C++类库,它封装了Windows ...

    C++库大全,教你怎样更好使用C++类库

    下面我们将深入探讨C++类库的一些核心概念和常用库,以及如何有效地使用它们。 C++类库是预先编写好的函数和对象集合,它们被封装在头文件中,供开发者在自己的项目中调用。使用类库可以极大地提高开发效率,因为...

    C++类库参考大全

    通过阅读《C++类库参考大全》以及其中的“ts005080.pdf”和“ts005080.zip”文件,开发者可以深入理解C++类库的使用方法,提升在Windows环境下开发C++应用的能力。这是一份宝贵的资料,对于任何希望在C++领域有所...

    C++调用C#类库

    在跨语言编程中,有时我们需要在C++代码中调用C#编写的类库,以利用C#提供的功能,如.NET Framework丰富的库支持、垃圾回收等。本文将深入探讨如何在C++中调用C#类库,以及涉及到的关键技术。 首先,C#类库是以DLL...

    C#调用C++类库方法调研

    这种方法不仅能够有效地解决C#调用C++类库的问题,而且还能保持原有的C++类库不变,确保其稳定性和兼容性不受影响。同时,通过适当调整C++类库中的回调函数,可以进一步提高解决方案的整体质量和可用性。

    C和C++类库手册说明

    《C和C++类库手册说明》是一份详尽的编程资源,主要涵盖了C++的I/O库、string库、map库、queue库、stack库,以及C的memory库和math库等多个核心库的使用方法和功能介绍。这份文档通常以CHM(Compiled Help Manual)...

    比较全的C++类库

    C++类库,很好用,非常全的C++类库,C++各大有名库的介绍

    C++标准类库手册

    C++标准类库手册(英语)

    C及C++函数和类库(中英文).

    C及C++函数和类库是编程者在开发过程中不可或缺的参考资料,它们涵盖了语言的核心功能以及标准库的详细信息。这两个CHM( Compiled HTML Help,编译后的HTML帮助文件)分别提供中英文版本,便于不同语言背景的开发者...

    C++调用C#类库demo

    在C++/CLI项目中,我们需要添加对C#类库的引用,这会生成一个元数据导入库(.lib文件),C++/CLI编译器会使用这个库来解析C#类库的类型信息。 5. 使用`cli::interop`命名空间: 在C++/CLI代码中,我们需要使用`...

    c及c++画图类库

    EasyX是专为C及C++开发者设计的一款图形绘制类库,它使得在VC++6.0环境下进行图形编程变得更加简单。这个库的核心目标是提供一个直观、易用且功能丰富的接口,帮助程序员快速实现图形界面和交互式图形应用。 EasyX...

    C++类库大全,C++类库大全(实用工具)

    C++类库大全(实用工具)。

    C++多线程编程类库

    在C++编程中,多线程技术是一种关键的并发处理机制,它允许程序同时执行多个独立的任务,从而提高系统的效率和响应性。C++11及其后续标准引入了内置的多线程支持,使得开发者可以直接在标准库中利用多线程功能。本文...

    Visual C++ 类库深入剖析

    10. **调试与优化**:了解如何利用Visual Studio的调试工具以及性能分析工具对MFC程序进行调试和优化,是提升代码质量和效率的关键步骤。 学习《Visual C++ 类库深入剖析》,不仅可以深化对C++语言的理解,还能掌握...

Global site tag (gtag.js) - Google Analytics