好的,我想这个问题可能听起来太傻了,但是内存管理(特别是在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
)您是否注意到上述方法有任何问题?
如果您对我的实现还有其他需要了解的内容,请告诉我...
MyClass
对象? - Jesse Goodvector<MyClass>
代替),只需小心,因为它需要更多的复制(将其作为引用传递给getListOfObjects
而不是返回它,在任何情况下这都是一个好主意)。 - Bernhard Barker