Я использую boost :: shared_ptr и boost :: dynamic_pointer_cast. У меня есть базовый класс, интерфейс, который наследуется от этого базового класса, а затем класс, который наследует от этого.
Итак A -> B -> C. Я создаю объект типа C, и он сохраняется как shared_ptr типа A. Затем я пытаюсь сделать 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 для этого же кода работает на другом компьютере с точно такими же классами. Который имеет меня в полной растерянности. Код также работал до недели назад, когда я внес изменения. Когда я отменил изменение, проблема все еще возникала.