我使用boost :: shared_ptr和boost :: dynamic_pointer_cast。我有一个基类,一个从该基类继承的接口,然后是一个从该类继承的类。boost :: dynamic_pointer_cast在有效转换时返回null
所以A - > B - > C.我创建了一个C类型的对象,它存储为A类型的shared_ptr。然后我尝试去做一个dynamic_pointer_cast来输入B,但是boost :: dynamic_pointer_cast返回NULL。
当我做一个boost :: static_pointer_cast并使用指针,它不会崩溃程序。但我更喜欢动态演员的工作。
这是怎么发生的?
编辑:这里是代码的紧凑部分(否则它太长了放在这里)。告诉我你是否需要比头文件更多的东西。
class A
{
public:
virtual ~A();
/** Contains other virtual functions and some static functions */
protected:
A();
};
class B
{
public:
/** Pure virtual functions */
/** Note: No destructor is declared (when I next have
access to the computer I'll try adding a virtual destructor) */
protected:
B();
};
class C
{
public:
C();
virtual ~C();
/** Implementation of pure virtual functions */
};
另外,此相同代码的dynamic_pointer_cast在另一台具有完全相同类的计算机上工作。这让我完全丧失了信心。代码也工作到一个星期前,当我做出改变。当我恢复了这个改变时,问题仍然存在。
后的代码,这是不可能的肯定告诉什么是错的没有这种。 – 2010-10-22 02:41:02
你使用什么编译器?哪些编译选项?几乎所有的编译器都有禁用RTTI的方法,你是否偶然做到这一点?用raw指针(而不是boost :: shared_ptr)的dynamic_cast是否有效? – EFraim 2013-01-30 19:43:28