以对象管理资源
该条款针中的资源指的是用户动态申请的资源。看一个例子:
假设有一个工厂函数,用于生产某特定的Investment对象
1 | class Investment { ... }; |
在上例中,如果用户不知道createInvestment的内部实现,那么就不知道Investment是动态创建出来的,另外如果用户知道createInvestment是动态创建出来的,也很有可能忘记了要delete。所以好的方式是利用非动态对象来管理动态申请的资源,利用非动态对象的析构函数来释放资源。
1 | int main() { |
这种其实还有一个问题,就是用户很有可能忘记使用share_ptr来管理,所以最好直接让工厂函数返回一个shared_ptr。
1 | std::shared_ptr<Investment> createInvestment() { |
通常使用shared_ptr和unique_ptr就可以完成对动态申请的资源进行管理,但是某些情况下可能需要自己设计一个用于管理动态资源的对象。