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();