《泛型》篇中提到的某个IT项目的辩论会,
一派坚持智能指针和裸指针可以“离婚”,它们是std::auto_ptr的支持者,
一派认为智能指针和裸指针不可以“离婚”,boost::scoped_ptr体现了他们的观点:
boost::scoped_ptr基本用法:
void testScopePtr()
{
boost::scoped_ptr <S> ss (new S);
if(ss) ///判断是否不空
{
ss->SetA(99);
cout << ss->a << endl;
(* ss).SetA(100); //和裸指针一样,也可以先用*取值
cout << (*ss).a << endl;
}
}
同样模拟了裸指针的功能(重载了“->”和“*”操作符);
还提供了是否为空的判断(重载了“!”操作符);
禁止了裸指针的偏移计算,比如:p++、p--、p+=5、p-=2等。
既然是智能指针,正如代码所演示的,不需要手工delete。
scoped_ptr明确禁用拷贝构造和赋值操作(回忆一下boost::noncopyable),所以智能通过指针或引用的方式将scoped_ptr对象传给一个函数: