class abc{
public:
abc2 *_abc2;
void set(){
_abc2=new abc2();
}
};
abc *_abc=new abc();
_abc->set();
...
........
delete _abc;
我想问,delete _abc后会不会里面的内存都会释放?要不要再delete _abc2;
------解决方案--------------------
有一个new就要有一个delete 数量必须相等
------解决方案--------------------
有个题外话,初始化为0是不是更好点,另外释放内存的时候,delete完成之后还要把指针赋为0,因为有些编译器delete执行之后,指针指向的不是NULL,而是一个不合法的内存地址
------解决方案--------------------
给set写一个对应的Release函数,用于释放_abc2所指向的内存。比如:
class abc
{
public:
abc() : _abc2(0) {}
void Create()
{
if (0 == _abc2)
_abc2 = new abc2();
}
void Release()
{
if (0 != _abc2)
{
delete _abc2;
_abc2 = 0;
}
}
private:
abc2 *_abc2;
};
abc *_abc = new abc();
_abc->Create();
...
_abc->Release();
delete _abc;