好吧,我想这个问题听起来可能太傻了,但是内存管理(尤其是在 C/C++ 中)从来都不是我的强项,而且由于它通常不是一件引人注目的事情,所以我倾向于忽略它。所以,如果这一切听起来很愚蠢,请原谅我。然而,由于我目前的项目涉及大量数据和处理,内存消耗很容易在几秒钟内超过 2GB,这肯定会减慢整个过程,所以......是时候开始考虑如何解决它了。
所以,这是我的情况......
我的主要类(其中我正在创建数百万个实例(希望它们被自动删除,因为它们不再被使用),所以据说这是罪魁祸首)(大致)是这样的:
class MyClass
{
public:
// My Constructors
MyClass ();
MyClass (std::string param);
// My Destructor (still empty)
virtual ~MyClass ();
// Some methods
void methodA(std::string moves);
void methodB();
//----------------------
// My Variables
//----------------------
boost::array<int,64> arrA;
boost::array<unsigned int,13> arrB;
unsigned int key;
boost::array<int,3> arrC;
int argA;
int argB;
};
这是(大致 - 实际代码已被更改)上述类的实例是如何创建的:
vector<MyClass*> SomeOtherClass::getListOfObjects()
{
vector<MyClass*> objects;
for (int i=0; i<MAX_OBJS; i++)
{
// Do some preparatory work
objects += new MyClass();
}
return objects;
}
以下是如何使用上述函数的结果:
void SomeOtherClass::doSth()
{
vector<MyClass*> objs = this->getListOfObjects();
int objsSize = objs.size();
for (int i=0; i<objsSize; i++)
{
MyClass* obj = objs[i];
// Do sth with obj
delete objs[i];
}
}
所以,我的问题是:
我应该在我的析构函数中做什么,以便当不再需要对象并因此被释放时,它的所有“子组件”也会被释放?(例如 2
boost::array
秒)您注意到上述方法有什么问题吗?
请让我知道您是否需要了解有关我的实施的任何其他信息...