存数组的指针。那么我们是否可以将资源管理类抽象成一个类似指针的类呢?在C++为我们提供的重载那些运算符能实现这一功能。具体讨论细节可以参见条款19“巧妙的将对象伪装成指针”于是他之后呈现出的形式更加的简洁,更加类似于我们惯用的普通指针。这样做的好处是异常情况下资源不会泄漏,但值得注意的是他确实没有将资源管理的问题从程序员的编码问题中解决掉。如果你对此疑惑不解,请回顾一下条款5所讲述的内容“必须手动释放COM组件式,别妄想智能指针帮你完成”。用完后将资源及时返回给系统,仍然是程序员需要自己解决的问题。
view plaincopy to clipboardprint void f()
{
InvestmentPtr pInvestment = new Investment(123);//重载构造函数实现RIIA
ProfitManagerPtr pProfit = new Profit(123);
pInvestment ->DoSomeThing();//这个动作太酷了,它俨然就是一个指针!
...
}
void f()
{
InvestmentPtr pInvestment = new Investment(123);//重载构造函数实现RIIA
ProfitManagerPtr pProfit = new Profit(123);
pInvestment ->DoSomeThing();//这个动作太酷了,它俨然就是一个指针!
...
}
OK智能指针诞生了~ 或许可以给他套上template这顶小帽子,他将呈现出更加的通用的形式。
view plaincopy to clipboardprint void f()
{
MySmartPtr pInvestment = new Investment(123);
MySmartPtr pProfit = new Profit(123); //智能指针可以复用了
pInvestment ->DoSomeThing();//这个动作太酷了,它俨然就是一个指针!
...
}
void f()
{
MySmartPtr pInvestment = new Investment(123);
MySmartPtr pProfit = new Profit(123); //智能指针可以复用了
pInvestment ->DoSomeThing();//这个动作太酷了,它俨然就是一个指针!
...
}
你可能会询问智能指针的更多细节,但让我们就此打住一下。让我们先看看引用计数以及如何用智能指针简化COM开发的问题。
作者“liuchang5的专栏”