欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

条款13:以对象管理资源

发布时间:2025/3/19 编程问答 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 条款13:以对象管理资源 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

首先考虑一个工厂函数

Investment * createInvestment(); void f() {Investment * pInv = createInvestment();...delete pInv; }

至少上面这个函数是不安全的,例如如果...里面包含return语句的话,
或者说...里面包含可能会抛出异常的语句。那么就会导致申请的内存得不到释放。
而下面就说明了管理对象的一般方法:

void f() {std::shared_ptr<Investment>(createInvestment());... }

用对象来进行管理,这样在离开作用域的时候申请的内存便会自动得到释放。
注意这里包含有两个关键的想法:
1. 获得资源之后应该把他们立刻放到管理对象里面。
2. 管理对象可以利用析构函数使得资源正确的被释放。
注意,shared_ptr等智能指针不能对内置的数组进行管理,因为他们在自己的析构函数里面调用的是

delete而不是delete[], 例如下面这样就是不可取的: shared_ptr<int> spi(new int[1024]); //不要这样做 这种情况应该使用vector来代替: shared_ptr<vector> spi(new vector<int>); //像这样

小结:
1. 为防止资源泄露,应该使用RAII对象,他们在构造函数中获得资源,而在析构函数里面释放资源。
2. auto_ptr不能用在多个指针指向同一个对象的场合。

转载于:https://www.cnblogs.com/-wang-cheng/p/4856320.html

总结

以上是生活随笔为你收集整理的条款13:以对象管理资源的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。