请求的系统资源需要最终还回系统,为了避免遗忘返还这个动作,可以利用析构函数在object销毁时自动调用的特点来实现。

简单说就是用object来管理资源。

以内存资源为例

class Investment {}; 

Investment* creatInvestment(){...} // factory function to produce investment object

void main()
{
Investment* pInv = creatInvestment();//call to get investment object .... delete pInv; // sometime we forget this, happens
} //solution
void main()
{
stid::auto_ptr<Investment> pInv(creatInvestment()); ...
}//when pInv is destroied, auto_ptr will be released. //problem with auto_ptr
//only one auto_ptr can point to one object
//if auto_ptr was assgined to another auto_ptr
//original auto_ptr would be null
//see following example:
void main()
{
stid::auto_ptr<Investment> pInv1(creatInvestment()); stid::auto_ptr<Investment> pInv2(pInv1); //pInv1 null pInv1 = pInv2;//pInv2 null
...
}

所以使用auto_ptr 在赋值或者复制时会产生问题。我们并不希望赋值以后就把原来的指针变成null

替代方案是使用  

void main()
{
stid::shared_ptr<Investment> pInv1(creatInvestment()); stid::shared_ptr<Investment> pInv2(pInv1); //pInv1 null pInv1 = pInv2;//pInv2 null
...
}

在拷贝时完全不会发生问题。需要注意的是在auto_ptr, shared_ptr中使用的是delete 而不是delete[]

如果我们

 stid::shared_ptr<Investment> pInv1(new char[10]);
会产生问题。

effective c++ 条款13 use object to manage resources.的更多相关文章

  1. Effective C++ Item 13 Use object to manage resources

    1. Always use object to manage resource! If you delete a pointer or release a handler manually by yo ...

  2. Effective C++ -----条款13:以对象管理资源

    为防止资源泄漏,请使用RAII(Resource Acquisiton Is Initialization) 对象,它们在构造函数中获得资源并在析构函数中释放资源. 两个常被使用的RAII class ...

  3. Effective C++ 条款13/14 以对象管理资源 || 在资源管理类中小心拷贝行为

    三.资源管理       资源就是一旦你使用了它,将来不用的时候必须归还系统.C++中最常用的资源就是动态内存分配.其实,资源还有 文件描述符.互斥器.图形界面中的字形.画刷.数据库连接.socket ...

  4. Effective C++ 条款13

    以对象管理资源 资源的种类非常多,动态分配的内存.文件描写叙述器.相互排斥锁.图像界面中画刷.数据库连接.网络socket等. 资源通常是有限的.当你不用时,必须释放.不然就会造成资源浪费.更严重的情 ...

  5. 《Effective C++》学习笔记条款13 以对象管理资源

    条款 13 :以对象管理资源 例:      voidf()      {           Investment *pInv = createInvestment();           ... ...

  6. EC读书笔记系列之8:条款13、14、15

    条款13 以对象管理资源 记住: ★为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放 ★两个常被使用的RAII classes分别是tr1::shared_ptr和aut ...

  7. [More Effective C++]条款22有关返回值优化的验证结果

    (这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回 ...

  8. More Effective C++ 条款0,1

    More Effective C++ 条款0,1 条款0 关于编译器 不同的编译器支持C++的特性能力不同.有些编译器不支持bool类型,此时可用 enum bool{false, true};枚举类 ...

  9. Effective C++ Item 15 Provide access to raw resources in resource-managing classes

    In last two item, I talk about resource-managing using RAII, now comes to the practical part. Often, ...

随机推荐

  1. AWS(0) - Amazon Web Services

    Computer EC2 – Virtual Servers in the Cloud EC2 Container Service – Run and Manage Docker Containers ...

  2. jenkins 通过批处理自动构建 非标准项目

    之前介绍了java和vs2010的项目构建,这些都是比较常见的,所以都用专门的工具.但但难免会遇到一些不常见的项目,下面介绍通过批处理进行构建,并用jenkins调用.我们这里使用plc语言,没有标准 ...

  3. 第 3 章 编写 PAM 应用程序和服务

    Solaris 开发者安全性指南 Previous: 第 2 章 开发特权应用程序 Next: 第 4 章 编写使用 GSS-API 的应用程序 第 3 章 编写 PAM 应用程序和服务 可插拔验证模 ...

  4. 怎样用js得到当前页面的url信息方法(JS获取当前网址信息)

    设置或获取对象指定的文件名称或路径.window.location.pathname 设置或获取整个 URL 为字符串.window.location.href; 设置或获取与 URL 关联的端口号码 ...

  5. hdu 4274 Spy&#39;s Work(水题)

    Spy's Work Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. 使用Visual Studio 创建新的Web Part项目

    使用Visual Studio 创建新的Web Part项目 Web Part是你将为SharePoint创建的最常见的对象之中的一个.它是平台构建的核心基块. 1. 管理员身份打开Visual St ...

  7. cocos2d-x3.2下使用Umeng 64位SDK注意事项

    友盟官方的样例中已经有了Cocos2d-x的Demo使用起来也是比較方便的.但在64位的版本号使用时须要注意 32位SDK改动: 将Xcode中Build Settings的Architectures ...

  8. POJ 2151 Check the difficulty of problems (动态规划-可能DP)

    Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4522   ...

  9. Winsock 编程流程

    近期看了<Window程序设计>感觉在网络方面讲的不错,讲的非常通俗易懂.与大家一同交流 转载请注明出处:http://blog.csdn.net/u010484477谢谢^_^ 使用 W ...

  10. VIM命令集

    Command Action Notes vim file +54 open file and go to line 54 any : command can be run using + on co ...