读书人

C++ 的new跟delete。嵌套new的时候是否

发布时间: 2013-07-11 15:38:46 作者: rapoo

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进行资源管理自动化

读书人网 >C++

热点推荐