考虑两个班级
class A{
public:
int i;
A(){}
explicit A(const int ii):i(ii){}
virtual ~A(){
cout<<"~A - "<< i <<endl;
}
virtual void inc(){
i++;
cout<<"i: "<<i<<endl;
}
};
class B: public A{
public:
int j;
B(){}
explicit B(const int jj, const int ii=-1):A(ii), j(jj){}
~B(){
cout<<"~B - "<<i<<", "<<j<<endl;
}
void inc(){
A::inc();
j++;
cout<<"j: "<<j<<endl;
}
};
现在我们可以在main()
中执行此操作:
A *pa = new B();
//...
pa->inc(); // implements B::inc();
现在使用boost
库
boost::shared_ptr<A> pa = boost::make_shared<B>(2);
//...
pa->inc(); // implements B::inc();
我的问题,在使用boost
版本时,是否可以使用这种方式,即两个版本可以以相同的方式使用,或者我是否需要做一些额外的事情(我不知道)很多内在的提升)
答案 0 :(得分:6)
智能指针有一些你无法做到的事情:
除此之外,您可以像任何其他指针一样处理智能指针,包括调用虚函数和正确的事情。
PS。如果可能,我建议您转而使用C ++ 11智能指针。它们被Boost智能指针“启发”(即或多或少地直接复制),所以你真正需要做的就是包括<memory>
头文件并更改例如boost::shared_ptr
到std::shared_ptr
。参见例如this reference site