首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

[正确就结贴]重载构造函数与析构函数的一个有趣的有关问题

2012-02-16 
[正确就结贴]重载构造函数与析构函数的一个有趣的问题NOW..目标:重载TStringList类,加入了一些新的propert

[正确就结贴]重载构造函数与析构函数的一个有趣的问题
NOW..

目标:重载TStringList类,加入了一些新的property和method。
情况:由于我在派生类里,也有构造和析构函数,但是没有进行任何的特别声明
没有加什么(overload或是什么的)

需要实现的问题,因为大家知道TStringList类本身有构造函数,我最近也在玩delphi,好象delphi里可以使用reintroduce;隐藏带基类中的同名方法,而由于我的派生类只是在create的时候,建立了几个新的参数,
所以,我的派生类中的基类函数带了参数,而TstringList的构造函数没有参数,这样是不是实际上是重载了构造函数,

而由于delphi中派生类如果还想使用基类中同名函数的时候,可以在函数中加入
introduce   create(。。。);

但是BCB中没有...翻了一下书好象,看到就是直接调用
例如
TStringList::TStringList();     //OK     我单步调试的时候没有问题,考虑可能是由于我的构造函数有参与,不会由基类冲突


问题来了:
我在析构函数中,把我自己new出来的一些指针释放,
SO

我先调用TStringList::~TStringList();
delete     a;


但是这里就有问题,我单步的时候,在执行~TStringList()的时候,会不停的调用我自己写的析构函数(可能因为他们的参数相同,就是没有任何的参数,而我的析构函数实际上叫~TRegIniStringList()     )

由于最近在转delphi写一些东西,发觉delphi与bcb差不多,还有新版本嘿嘿,在关于重载等的问题,有点迷晕。。

那位指点一下,如何先调基类里的析构函数,然后并执行一下我自己的释放操作呢?


[解决办法]
如何先调基类里的析构函数,然后并执行一下我自己的释放操作呢?

看来你是C++的基础不扎实啊
可以看一下C++的虚函数
virtual
[解决办法]
从lz的说明就可以看出lz的delphi还没学好基础。reintroduce不是你说的那回事情,也不是那样的用法。

// 这里代码出了问题,会不停的call自己.死锁几次以后程序异常抛出。
代码在哪里?
另建议你先释放你自己的资源然后再调用父类的析构函数。

[解决办法]
class TCheckRegIniList : public TStringList{......};

__fastcall TCheckRegIniList::TCheckRegIniList(AnsiString IniPosition,AnsiString IniSection, HKEY RegRoot, AnsiString RegPath):TStringList::TStringList( )
{
TStringList::TStringList( );
//放在這裡是不行的,C這是構建一個新的TStringList,要放在初始化列表中,才對。
}

__fastcall TCheckRegIniList::~TCheckRegIniList( )
{
TStringList::~TStringList( ); //不能在這裡調用父類的析構函數,這樣會引起循環調用,会不停的call自己。C++在析構時會自動調用父類的析構函數的。
}


热点排行