读书人

200分问个C++基础有关问题

发布时间: 2012-03-05 11:54:02 作者: rapoo

200分问个C++基础问题
class B : public A;
class C : public A;
class D : public A;


B* b = new B;
C* c = new C;
D* d = new D;
我现在把这b,c ,d三个对象加入一个List。

释放时为了简单,我把三个对象通过dynamic_cast统一转化成A类型,然后再delete

比如A* a = dynamic_cast<A*>(List->Item[0]);
delete a;
a = NULL;

这样释放会不会有问题?




[解决办法]
A的析构函数定义成 virtual 就没问题
[解决办法]

探讨
A的析构函数定义成 virtual 就没问题

[解决办法]
感觉上应该没问题,不过还是要看你类的具体定义.
[解决办法]
探讨

A的析构函数定义成 virtual 就没问题

[解决办法]
探讨

引用:
A的析构函数定义成 virtual 就没问题

[解决办法]
探讨
感觉上应该没问题,不过还是要看你类的具体定义.

[解决办法]
怎么你们都这么快啊.
析构函数定义成 virtual 就没问题.
A B C D都写自己的析构.
释放自己申请的内存.
[解决办法]
大家都说了,用虚析构函数。
[解决办法]
..............
[解决办法]
探讨
感谢大家的回复。

这是一个C++多态的问题。

我的程序按这个思路设计在正常运行着。

我发这个帖子的原因是我对多态还有没有了解到位的地方。dynamic_cast把基类对象指针转派生类对象指针,肯定是没有问题的。那么反过来转行不行呢?
我的担心的问题是:派生类对象在内存中的体积肯定大于基类对象,那么通过dynamic_cast把派生类对象指针转成基类对象指针后,delete这个指……

读书人网 >C++ Builder

热点推荐