分类: C/C++
2009-03-23 18:02:30
问题:在c++中,struct 中包含class对象成员的时候,用ew分配内存,用delete释放的时候,该class的析构函数会被调用吗?
一个简单的例子:
|
输出结果:
construct Point.
construct Point.
--------------------------
construct Point.
construct Point.
destruct Point.
destruct Point.
--------------------------
destruct Point.
destruct Point.
从输出结果可以很明显的看出,不管是在栈上分配空间还是在堆上通过new来分配内存都会调用Point的构造函数。
Rect rt;定义一个Rect对象,在栈上分配空间,调用了Point的构造函数,因为有两个点,所以调用了两次。
而prt = new Rect();用new为Rect的指针prt分配空间,使用delete释放。调用两次构造两次析构。最后分割线下面的则是程序函数退出前要做的工作,释放栈上的空间,调用了两次构造函数。
其实在C++中struct和class是没有什么本质区别的(可以参考《深度探索 C++对象模型》1.2关键词所带来的差异一节),不同的是在C++中struct默认的访问权限是public,而class是private。在C++中要使用C中的struct就要通过下面的方式:
|