Вот что бывает, когда пишешь на C++, не зная, зачем нужны виртуальные деструкторы...
классы CRPProp_0n - производные от общего базового класса. Вроде задумка неплохая, можно работать с их массивом, удобно. Но видимо, что-то не заладилось, почему-то их методы не вызывались (про виртуальные функции разработчик не знал)... И тут на выручку эмо-кодеру пришло приведение типов! Правда, про работу с массивом в цикле пришлось забыть...
CBroadcastPropPP::CBroadcastPropPP()
{
m_bAdminMode = FALSE;
m_aProps.Add(new CRPProp_01);
m_aProps.Add(new CRPProp_02);
m_aProps.Add(new CRPProp_021);
m_aProps.Add(new CRPProp_022);
m_aProps.Add(new CRPProp_03);
m_aProps.Add(new CRPProp_05);
m_aProps.Add(new CRPProp_06);
m_aProps.Add(new CRPProp_07);
}
#define PPPos_Dir 0
#define PPPos_Recursive 1
#define PPPos_Masks 2
#define PPPos_MaxSize 3
#define PPPos_Archive 4
#define PPPos_Subject 5
#define PPPos_Types 6
#define PPPos_MaxRcpt 7
#define PPPos_BCC 8
void CBroadcastPropPP::Initialize(IRegistrato
r* pRegistrator)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState(
));
m_pRegistrator=pRegistrator;
((CRPProp_01*)(m_aProps[PPPos_Dir]))->_I
nitialize(m_pRegistrator->m_sStartupPath,
m_pRegistrator);
((CRPProp_02*)(m_aProps[PPPos_Recursive]
))->_Initialize(m_pRegistrator->m_sStart
upPath, m_pRegistrator);
((CRPProp_021*)(m_aProps[PPPos_Masks]))-
>_Initialize(m_pRegistrator->m_sStartupP
ath, m_pRegistrator);
((CRPProp_022*)(m_aProps[PPPos_MaxSize])
)->_Initialize(m_pRegistrator->m_sStartu
pPath, m_pRegistrator);
((CRPProp_03*)(m_aProps[PPPos_Archive]))
->_Initialize(m_pRegistrator->m_sStartup
Path, m_pRegistrator);
((CRPProp_05*)(m_aProps[PPPos_Types]))->_
Initialize(&m_pRegistrator->m_DB,m_pRegistrator->m_s
StartupPath);
((CRPProp_06*)(m_aProps[PPPos_MaxRcpt]))
->_Initialize(m_pRegistrator->m_sStartup
Path, m_pRegistrator );
((CRPProp_07*)(m_aProps[PPPos_BCC]))->_I
nitialize(m_pRegistrator->m_sStartupPath,
m_pRegistrator );
}
CBroadcastPropPP::~CBroadcastPropPP()
{
delete (CRPProp_01*)m_aProps[PPPos_Dir];
delete (CRPProp_02*)m_aProps[PPPos_Recursive];
delete (CRPProp_021*)m_aProps[PPPos_Masks];
delete (CRPProp_022*)m_aProps[PPPos_MaxSize];
delete (CRPProp_03*)m_aProps[PPPos_Archive];
delete (CRPProp_05*)m_aProps[PPPos_Types];
delete (CRPProp_06*)m_aProps[PPPos_MaxRcpt];
delete (CRPProp_07*)m_aProps[PPPos_BCC];
}