我有一个方法创建了一些Foo并将它添加到Foos的矢量中。 Foos负责在销毁期间删除他们的酒吧。 Foo构造函数需要一个Bars的指针和它们的大小。当函数返回时,本地Foo被删除并销毁它的Bars,但是我得到一个有效的Foo对象。C++用局部变量指针管理
我应该如何更正确地处理这个问题?我应该用其他方式管理酒吧吗?我应该让构造函数复制数组吗?我可能会有成千上万的酒吧。
还没有试图编译这个,这只是一个发生了什么事情的例子。
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;
}
大小并不是一个很好的指示符,因为您可以像这个新的Bar [1]那样分配,而且必须使用delete []删除它,否则是否使用delete []或delete。因此,使用布尔值来指示数组分配,或者甚至更好地传递一个函数,它将执行正确的操作,或者使用知道如何删除它的智能指针。 – 2010-10-18 17:17:02