帶有指針型數(shù)據(jù)成員的類新手初學(xué)C++心得
作者: 來(lái)源: 發(fā)布時(shí)間:2011-3-15 16:50:37 點(diǎn)擊:
最近打算寫一個(gè)算法類,算法類中要有一個(gè)指針型數(shù)據(jù)成員,然而該指針型數(shù)據(jù)成員卻不能在構(gòu)造函數(shù)只能夠分配堆內(nèi)存(因?yàn)榇藭r(shí)我們還不確定數(shù)組的維度),只有調(diào)用了某個(gè)函數(shù)之后,方知道動(dòng)態(tài)數(shù)組維度,考慮不在類的構(gòu)造函數(shù)中調(diào)用確定數(shù)組維度的那個(gè)函數(shù)做如下設(shè)想:
在類的其他其他成員函數(shù)中為該指針成員分配堆內(nèi)存,析構(gòu)函數(shù)中釋放該數(shù)據(jù)成員。問(wèn)了幾個(gè)同學(xué)和網(wǎng)友后做如下設(shè)計(jì):
該類
class stringprocess
{
public:
stringprocess(void);
~stringprocess(void);
//int GetLongestCommonSequence(wstring x,wstring y,wstring result);
void test();
private:
int *indexes;//聲明指向指針的指針,保存兩個(gè)字符串中的最長(zhǎng)公共序列中的字符分別出現(xiàn)的位置。
wstring xpart;//最大公共字序列的父串之一
wstring ypart;//
};
{
public:
stringprocess(void);
~stringprocess(void);
//int GetLongestCommonSequence(wstring x,wstring y,wstring result);
void test();
private:
int *indexes;//聲明指向指針的指針,保存兩個(gè)字符串中的最長(zhǎng)公共序列中的字符分別出現(xiàn)的位置。
wstring xpart;//最大公共字序列的父串之一
wstring ypart;//
};
該類的構(gòu)造函數(shù)
stringprocess::stringprocess(void)
{
indexes=NULL;
}
{
indexes=NULL;
}
該類的析構(gòu)函數(shù)
:
stringprocess::~stringprocess(void)
{
if (indexes!=NULL)
{
cout<<"指針成員變量已經(jīng)被分配了堆內(nèi)存,需要以delete模式釋放"<<endl;
delete[] indexes;
cout<<"釋放完畢"<<endl;
}
else
{
cout<<"指針成員變量為被分配堆內(nèi)存,不需要以delete模式釋放"<<endl;
}
cout<<"destructor"<<endl;
}
{
if (indexes!=NULL)
{
cout<<"指針成員變量已經(jīng)被分配了堆內(nèi)存,需要以delete模式釋放"<<endl;
delete[] indexes;
cout<<"釋放完畢"<<endl;
}
else
{
cout<<"指針成員變量為被分配堆內(nèi)存,不需要以delete模式釋放"<<endl;
}
cout<<"destructor"<<endl;
}
[收藏此文章]