使用boost :: make_shared和inheritence

zer*_*int 0 c++ inheritance make-shared

考虑两个班级

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;
    }
};
Run Code Online (Sandbox Code Playgroud)

现在我们可以这样做main():

A *pa = new B();
//...
pa->inc(); // implements B::inc();
Run Code Online (Sandbox Code Playgroud)

现在使用boost库的版本

boost::shared_ptr<A> pa = boost::make_shared<B>(2);
//...
pa->inc(); // implements B::inc();
Run Code Online (Sandbox Code Playgroud)

我的问题,在使用该boost版本时,是否可以使用这种方式,即两个版本可以以相同的方式使用,或者我需要做一些额外的事情(我不知道很多内部的提升)

Som*_*ude 6

智能指针有一些你无法做到的事情:

  • 您不能将智能指针作为参数传递给需要普通指针的函数.
  • 您不能将正常指针指定给智能指针.

其他你可以像任何其他指针一样处理智能指针,包括调用虚函数和正确的事情.

PS.如果可能,我建议您转而使用C++ 11智能指针.他们是由升压智能指针"灵感"(即或多或少复制直),让你真正需要做的是包含<memory>头文件,并更改如boost::shared_ptrstd::shared_ptr.参见例如该参考站点.