接口容易被正确使用,不易被误用

c++简单工厂模式时,初级实现为ITest* CreateTestOld(), 然后用户负责释放返回的对象。如果忘记释放就会造成memory leak,所以在设计工厂接口时就应屏蔽这个潜在的问题,这时就可以用智能指针shared_ptr<ITest> CreateTest(),由他负责对象资源的管理,而对客户端的使用来说更简洁了。

 #include "stdafx.h"
#include <memory>
#include <iostream>
using namespace std; class ITest
{
public:
virtual void Func() = ;
virtual ~ITest(){}
}; class Test : public ITest
{
public:
void Func() override
{
cout << "Test::Func" << endl;
}
Test()
{
cout << "Test ctor!" << endl;
}
~Test()
{
cout << "Test destroy!" << endl;
} }; class Factory
{
public:
static shared_ptr<ITest> CreateTest()
{
return shared_ptr<ITest>(new Test);
} static ITest* CreateTestOld()
{
return new Test;
}
}; int _tmain(int argc, _TCHAR* argv[])
{
auto ptr2 = Factory::CreateTestOld();
ptr2->Func();
delete ptr2; auto ptr = Factory::CreateTest();
ptr->Func(); return ;
}

最新文章

  1. git push :推送本地更改到远程仓库的三种模式
  2. C 不改变顺序,原址剔除数组中的0元素
  3. (转)word2vec前世今生
  4. Eclipse配置信息
  5. Java用DOM操作xml
  6. 【待解决】编译V8引擎出错-snapshot.cc
  7. big_table练习数据表
  8. 日志管理-NLog日志框架简写用法
  9. javascript第十四课,方法的扩展prototype
  10. ITIL该研究的结论(互联网思维的结合)
  11. webBrowser.execWB的完整说明
  12. python 之 批量替换文件中文本后缀
  13. php中常用的字符串大小写转换函数实例解释
  14. STL --&gt; 高效使用STL
  15. ●BZOJ 1272 [BeiJingWc2008]Gate Of Babylon
  16. c#语言中的Process进程类型的使用示例
  17. pythonのsimple_tag
  18. 摘选改善Python程序的91个建议
  19. 底图与蒙版的过渡效果transition
  20. sqlServer 获取最新的一条数据

热门文章

  1. Redis的集群方案之Sentinel(哨兵模式)(待实践)
  2. Servlet自动刷新页面
  3. 基于xml配置springmvc
  4. Java线程:Callable和Future
  5. Centos7下安装.bin格式
  6. ZOJ - 3471 Most Powerful (状态压缩)
  7. HTML5----CSS3图片滤镜(filter)特效
  8. NHibernate之旅(8):巧用组件之依赖对象
  9. String,StringBuffer,StringBuilder三者有什么异同?
  10. ZOJ 3872 计算对答案的贡献