C++ 的new跟delete。嵌套new的时候是否需要嵌套delete
C++ 的new和delete。嵌套new的时候是否需要嵌套delete比如我有如下代码struct A{string astring b}struc
C++ 的new和delete。嵌套new的时候是否需要嵌套delete
比如我有如下代码
struct A
{
string a;
string b;
};
struct B
{
string c;
string d;
struct A *structa;
};
struct C
{
string d;
string e;
struct B *structb;
};
struct C *structc = new struct C;
structc->d = "d";
structc->e = "e";
structc->structb = new struct B[2];
structc->structb->c = "c1";
structc->structb->d = "d1";
structc->structb->structa = new struct A[2];
((structc->structb) + 1)->c = "c2";
((structc->structb) + 1)->d = "d2";
((structc->structb) + 1)->structa = new struct A[2];
我想问的是,当我想 delete掉structc的时候,我该怎么操作。
直接 delete structc;
还是要从内层开始,
先 delete b[0]-> structa,
再delete b[1]-> structa,
然后delete structb,
最后delete structc; C++ struct new delete
[解决办法]当然要从内层开始
[解决办法]和 new 的顺序相反.
[解决办法]用类的析构就不会有这个问题
[解决办法]这里new和Delete的过程就像产品,包装时由里面到外面,而解包时相反。
delete []A;
delete []B;
delete []C;
[解决办法]structc->structb = new struct B[2]; 因为C中保存了分配B的地址,如果先删除C,C整个数据无效了,就没有办法删除B了,因为不知道分配B的地址了!
[解决办法]像这种情况,最好使用boost的scoped_ptr、shared_ptr进行资源管理自动化