Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost::使_与继承共享_C++_Inheritance_Make Shared - Fatal编程技术网

C++ 使用boost::使_与继承共享

C++ 使用boost::使_与继承共享,c++,inheritance,make-shared,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 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;
    }
};
现在使用
boost
library

boost::shared_ptr<A> pa = boost::make_shared<B>(2);
//...
pa->inc(); // implements B::inc();
boost::shared_ptr pa=boost::make_shared(2);
//...
pa->inc();//实现B::inc();

在使用
boost
版本时,我的问题是这样使用是否合适,即两个版本可以以相同的方式使用,或者我是否需要做一些额外的事情(我不太了解boost的内部结构)

有两件事是智能指针无法做到的:

  • 不能将智能指针作为参数传递给需要普通指针的函数
  • 无法将普通指针指定给智能指针
另外,您可以像处理任何其他指针一样处理智能指针,包括调用虚拟函数和正确的操作


如果可能,我建议您迁移到C++11智能指针。它们是受Boost智能指针的“启发”(即或多或少是直接复制的),因此您真正需要做的就是包含
头文件,并将例如
Boost::shared_ptr
更改为
std::shared_ptr
。请参见,例如:

有几件事是智能指针无法做到的:

  • 不能将智能指针作为参数传递给需要普通指针的函数
  • 无法将普通指针指定给智能指针
另外,您可以像处理任何其他指针一样处理智能指针,包括调用虚拟函数和正确的操作


如果可能,我建议您迁移到C++11智能指针。它们是受Boost智能指针的“启发”(即或多或少是直接复制的),因此您真正需要做的就是包含
头文件,并将例如
Boost::shared_ptr
更改为
std::shared_ptr
。请参见,例如…

非常感谢您的澄清和链接。我现在非常感谢您的澄清和链接。我现在毫无疑问
boost::shared_ptr<A> pa = boost::make_shared<B>(2);
//...
pa->inc(); // implements B::inc();