我有一个方法可以创建一些 Foo 并将其添加到 Foos 的 vector 中。 Foos 负责在销毁期间删除其 Bars。 Foo 构造函数采用 Bars 的指针和它们的大小。当函数返回时,本地 Foo 被删除并销毁它的 Bars,但是我得到一个有效的 Foo 对象。
我应该如何更正确地处理这个问题?我应该以其他方式管理 Bars 吗?我应该让构造函数复制数组吗?我可能会拥有数十万个 Bars。
还没有尝试编译这个,这只是正在发生的事情的一个例子。
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
使用 std::vector
:
class Foo
{
private:
vector<Bar> myBars;
public:
Foo(const vector<Bar>& bars) : myBars(bars) {}
vector<Bar>& getBars()
{
return myBars;
}
int getSize()
{
return myBars.size();
}
};
关于C++指针管理与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3960845/