Я бы порекомендовал поместить функцию something () как чисто виртуальный в базовый класс и наследовать от него class1 и class2.
class Base
{
public:
virtual void something() = 0;
virtual ~Base(){}; // since we use Base class pointer the destructor should be virtual
};
class class1 : public Base
{
public:
void something(){ //do stuff
}
};
class class2 : public Base
{
public:
void something(){ //do other stuff
}
};
Вот пример использования этой техники:
int main()
{
Base* a = NULL;
if (myapp.advanced == true)
a = new class1();
else
a = new class2();
a->something();
// when the instance is not needed anymore destroy it.
delete a;
}
Как упоминал Фред Нурк в комментариях, есть и другие альтернативы использования оператора delete
- auto_ptr, различные умные указатели для повышения.Они широко используются многими людьми (в том числе и мной), облегчая контроль жизни объектов, созданных с помощью new
.
Еще одно редактирование после комментария ОП:
Не забудьте включить множественное включениемакрос защиты в ваших заголовках
#ifndef _SOME_UNIQUE_NAME_HERE_
#define _SOME_UNIQUE_NAME_HERE_
// header body goes here
#endif
, чтобы избежать многократного включения (прямого или косвенного) ваших заголовков в один cpp.