SmartPtr
本博客已搬至:http://www.cnblogs.com/baiyanhuang/
posts - 29,comments - 176,trackbacks - 0
共2页: 1 2 
代码数量少, 并不代表其后执行的指令少; 当然,对于现在的编译器,我们有理由相信它会帮我们优化的很好,我不敢保证我的消除了if-else的代码会比其优化后的更好, 但至少我们知道了这其中优化有可能是这么做的。
博主果然强, 做梦都在工作, 而且还是内存泄露这么具体的事, 而且还那么准。。。。

我们项目中一般用
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

DEBUG_NEW分配的内存会被跟踪, 所以当程序退出的时候我们能知道哪些内存没被释放以及其详细信息。

博主前面讲的几种方法, 如分配申请号, 内存地址, 内存大小都不曾使用过, 但的确有意思, 有启发。
对,就是搬家:)
re: C++模板类的三种特化 SmartPtr 2007-07-05 17:30
谢谢walkspeed的回复, 我想对于全特化和偏特化这么理解应该是正确的, 就是全特化后确定了一个真正的类型, 而偏特化后其实还是一个原类型, 这样的话, 以上2, 3的确属于偏特化。
模板的运用的确很广,无论模板元编程中的将计算提前到编译器,还是编译器多态(或者叫静态多态), 都是非常漂亮聪明的应用, 在<<Modern C++ Design>>有着极好的体现。
re: C++模板类的三种特化 SmartPtr 2007-07-05 11:53
从广义上来讲, 我觉得可以把这种情形归入模板偏特化。
但是根据我们一般的理解,模板的偏特化是指需要根据模板的某些但不是全部的参数进行特化, 如下:
template<class T1, class T2>
class A
{
}

template<class T1>
class A<T1, int>
{
}

说实话, 我第一次发现第二和第三种用法时, 还是觉得挺新鲜的,这到底是属于全特化还是偏特化, 我也说不清楚, 但这也不重要,只要我们知道有这种用法,能应用它就行了
re: do...while(0)的妙用 SmartPtr 2007-07-04 11:02
to 沐枫
欢迎参与讨论。

的确,对于用do-while-break消除goto语句,的确不是一个很完美的例子,用auto_ptr是一个很好的选择, 而且这样也达到了异常安全的目的。但是auto_ptr只能处理指针这种资源, 我们可能还有处理其他资源,比如文件, 数据库链接,网络连接等等。 这样,在没有类似auto_ptr的机制处理这些资源的时候, 用do-while-break会是一个比较简单但不算太差的选择。
另外, 对于你提到的多层循环的问题, 我想你可能被“do-while是用来做循环“这个定式限制了,这里do-while(0)的作用是在执行遇到错误时能break,正确的释放资源, 也就是说这么设计着去用的, 你想想, 是不是不会出现你想的那种情况?
楼主好像对C++和CAD这一块很有兴趣与研究,我对这方面也有所了解,曾组队自行研发学习过CAD系统。刚来CppBlog,楼主今后多多指教了。
re: 网讯笔试归来 SmartPtr 2007-03-04 23:09
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}

***************************************
因为C++delete一个NULL指针是合法的。(可能编译器delete的时候就对NULL进行了特殊处理),所以无需判断,直接写:
delete [] m_Data;
m_Data = NULL;
共2页: 1 2