当我有一个类的std :: vector时,我对如何使用析构函数感到困惑.
所以如果我创建一个简单的类如下:
class Test
{
private:
int *big;
public:
Test ()
{
big = new int[10000];
}
~Test ()
{
delete [] big;
}
};
Run Code Online (Sandbox Code Playgroud)
然后在我的主要功能中,我执行以下操作:
Test tObj = Test();
vector<Test> tVec;
tVec.push_back(tObj);
Run Code Online (Sandbox Code Playgroud)
当我离开范围时,我在Test的析构函数中遇到运行时崩溃.为什么这样,我怎样才能安全地释放我的记忆?
我想要做的是基本上创建两个对象向量,其中一些对象被输入到两个列表中,一些对象被输入到一个对象中.我发现的第一个问题是,当我使用push_back()将对象添加到两个列表中时,对象被复制,这样当我从一个列表中更改它时,对象在另一个列表中没有改变.为了解决这个问题,我尝试创建一个指向对象的指针列表作为列表之一.但是,当我稍后访问指针时,数据似乎已损坏,数据成员值都是错误的.以下是我的代码的一些片段:
载体的定义:
vector<AbsorbMesh> meshList;
vector<AbsorbMesh*> absorbList;
Run Code Online (Sandbox Code Playgroud)
...向两者添加一个对象:
AbsorbMesh nurbsMesh = nurbs.CreateMesh(uStride, vStride);
// Add to the absorption list
absorbList.push_back(&nurbsMesh);
// Store the mesh in the scene list
meshList.push_back(nurbsMesh);
Run Code Online (Sandbox Code Playgroud)
访问对象:
if (absorbList.size() > 0)
{
float receivedPower = absorbList[0]->receivedPower;
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?