У меня есть метод, который создает некоторый Foo и добавляет его к вектору Foos.Foos отвечает за удаление своих баров во время уничтожения.Конструктор Foo берет указатель на столбцы и их размер.Когда функция возвращается, локальный Foo удаляется и разрушает его столбцы, однако я получаю обратно действительный объект Foo.
Как мне следует обрабатывать это более правильно?Должен ли я сделать так, чтобы Бары управлялись другим способом?Должен ли я иметь конструктор скопировать массив вместо этого?У меня потенциально будут сотни тысяч баров.
Я не пытался это скомпилировать, это всего лишь пример того, что происходит.
class Bar
{
public:
Bar(){}
~Bar(){}
int a;
int b;
int c;
};
class Foo
{
private:
Bar * myBars;
int size;
public:
Foo(Bar * myBars, int size)
{
this->myBars = myBars;
this->size = size;
}
Bar * getBars()
{
return myBars;
}
int getSize()
{
return size;
}
~Foo()
{
if(myBars != NULL)
{
if(size == 1)
{
delete myBars;
}
else if(size > 1)
{
delete [] myBars;
}
}
}
};
void doIt(std::vector<Foo> & foos)
{
Bar * myBars = new Bar[4];
//Pretend we initialize the Bars...
Foo foo(myBars);
foos.push_back(foo);
//local foo gets deleted
}
int main()
{
std::vector<Foo> foos;
doIt(foos);
Bar * myBars = foos[0].getBars();
int size = foos[0].getSize();
//Do something with myBars
return 0;
}