我有一個方法創建了一些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