У меня есть абстрактный класс module
, из которого происходят определенные модули. Во время выполнения, я анализирую конфигурационный файл и определить конкретный тип модуля для каждого модуля в конфигурационном файле:Удаление вектора указателей, переданных классу
std::vector<module*> modules;
module *temp;
//Let nm be the result of parsing as a std::string
if(nm == "type1")
{
temp = new module_1(...);
}
else if(nm == "type2")
{
temp = new module_2(...);
}
else if(nm == "type3")
{
temp = new module_3(...);
}
else
{
//Syntax error
return -1;
}
modules.push_back(temp);
partition p;
p.modules = modules;
вручая от вектора modules
к partition
класса:
class partition
{
public:
//Member functions
private:
//...Other variables
std::vector<module*> modules;
};
Что такое правильный способ освободить память для этих указателей модуля, как только я покончу с ними? Я пытался удалить их в деструкторе для partition
класса следующим образом, но завелся с ошибкой сегментации:
partition::~partition()
{
for(unsigned i=0; i<modules.size(); i++)
{
delete modules[i];
}
}
Почему вы решили использовать 'std :: vector' вместо 'std :: vector '? –
LihO
@LihO Предполагаю, что он использует виртуальные функции. – Lalaland
@Lalaland - это правильно. 'module_1' происходит от' module' и т. д. – Adam27X