0

考虑两个类

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版本时,是否可以使用这种方式,即两个版本都可以以相同的方式使用,还是我需要做一些额外的事情(我不太了解 boost 的内部原理)

4

1 回答 1

6

有几件事你不能用智能指针做:

  • 您不能将智能指针作为参数传递给需要普通指针的函数。
  • 您不能将普通指针分配给智能指针。

除此之外,您可以像处理任何其他指针一样处理智能指针,包括调用虚函数并且会发生正确的事情。

PS. If possible, I recommend you to migrate to the C++11 smart pointers instead. They were "inspired" (i.e. more or less copied straight) by the Boost smart pointers, so all you really have to do is include the <memory> header file and change e.g. boost::shared_ptr to std::shared_ptr. See e.g. this reference site.

于 2012-09-10T11:18:06.177 回答