c – boost :: shared_ptr和继承

c – boost :: shared_ptr和继承,第1张

概述我正面临着一种情况,我有一个std :: vector的boost :: shared_ptrs的基类.在我的程序过程中,我需要将共享指针存储在该向量中的派生类对象中,并且在稍后的程序中,需要检索这些共享指针. 以下代码说明了我的问题: #include <iostream>#include <vector>using namespace std;#include <boost/make_ 我正面临着一种情况,我有一个std :: vector的boost :: shared_ptrs的基类.在我的程序过程中,我需要将共享指针存储在该向量中的派生类对象中,并且在稍后的程序中,需要检索这些共享指针.

以下代码说明了我的问题:

#include <iostream>#include <vector>using namespace std;#include <boost/make_shared.hpp>#include <boost/foreach.hpp>class Base{public:    virtual ~Base()    {    }};/******************************************/typedef boost::shared_ptr< Base > BasePtr;/******************************************/class Derived1 : public Base{public:    voID derived1_test()    {        cout << "derived1_test" << endl;    }    /******************************************/    int i1;};/******************************************/typedef boost::shared_ptr< Derived1 > Derived1Ptr;/******************************************/class Derived2 : public Base{public:    voID derived2_test()    {        cout << "derived2_test" << endl;    }    /******************************************/    int i2;};/******************************************/typedef boost::shared_ptr< Derived2 > Derived2Ptr;/******************************************/int main(){    Derived1Ptr d1 = boost::make_shared< Derived1 >();    Derived2Ptr d2 = boost::make_shared< Derived2 >();    vector< BasePtr > v;    v.push_back( d1 );    v.push_back( d2 );    BOOST_FOREACH(BasePtr bPtr,v)    {        try        {            Derived1& d11 = dynamic_cast< Derived1& >( *bPtr );            d11.derived1_test();        }        catch (const std::bad_cast& e)        {            Derived2& d22 = dynamic_cast< Derived2& >( *bPtr );            d22.derived2_test();        }    }    return 0;}

在上面的代码中,如果我更改BOOST_FOREACH中的代码

Derived1& d11 = dynamic_cast< Derived1& >( *bPtr );

Derived1Ptr d11 = dynamic_cast< Derived1Ptr >( bPtr );

,我在VS2010上得到以下编译时错误

invalID target type for dynamic_cast target type must be a pointer or reference to a defined class

我的问题是我想使用boost :: shared_ptr不参考.其次,当对象引用是不同的类型(尝试使用共享指针,但是获得前面提到的编译器错误)时,我正在使用dynamic_cast将抛出一个std :: bad_cast异常.这显然很慢我想要能够使用更加面向性能的方法.我正在寻找的是任何解决方案,而不是使用dynamic_cast和异常处理.

欢迎任何关于代码或设计变更的建议.

解决方法 使用 dynamic_pointer_cast 总结

以上是内存溢出为你收集整理的c – boost :: shared_ptr和继承全部内容,希望文章能够帮你解决c – boost :: shared_ptr和继承所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1246145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存