单例模式简介以及C++版本的实现
作者:网络转载 发布时间:[ 2015/9/18 13:43:45 ] 推荐标签:测试开发技术 .NET
上述代码有几个地方要详细解析一下:
1. 在释放类的时候,如果类中有动态变量成员,一般要先释放其中的内容,然后在调用析构函数释放类本身的空间。类似的,比如在vector<int*> array,如果直接array.clear,其中,分配的内存空间会泄露,正确的方法是,先释放掉分配的内容,然后清空空间。
for (vector<void *>::iterator it = v.begin(); it != v.end(); it ++)
if (NULL != *it)
{
delete *it;
*it = NULL;
}
v.clear();
2. 上述代码定义了一个锁类,封装了临界区的相关操作,作为资源管理类,内部有临界区变量,作为多线程安全的保证。局部资源管理类变量使得,当异常发生时,也能调用析构函数,释放临界区资源
3. 在进行判断时,判断了两次,提高效率。因为该方法调用第一次产生实例,而pInstance == NULL 大部分情况下都为false,如果只判断一次,那么每次获取实例前都需要加锁,效率太低。
4. 定义一个嵌套类,和对应的静态局部变量,这样,当整个单例释放之前,可以通过它来找到单例指针,然后delete掉他,这样不会有内存泄露发送了。
5. 使用CRT类函数的内存泄露检测功能,方便查看调试。
文章的后,给出测试结果图:
OK!
读者可以在各个构造和析构函数中间加上端点,也可以尝试注释掉CGarbo的析构函数调试,看看有没有内存泄露。
好久没有更新文章,这段时间工作很忙,忙不可怕,可怕的是没有目的、没用动机的忙。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11