新手初学C++:带有指针型数据成员的类

作者:finallyly 出处:博客园(注意:转载请注明作者和出处)

最近打算写一个算法类,算法类中要有一个指针型数据成员,然而该指针型数据成员却不能在构造函数只能够分配堆内存(因为此时我们还不确定数组的维度),只有调用了某个函数之后,方知道动态数组维度,考虑不在类的构造函数中调用确定数组维度的那个函数做如下设想:

在类的其他其他成员函数中为该指针成员分配堆内存,析构函数中释放该数据成员。问了几个同学和网友后做如下设计:

该类
class stringprocess
{
public:

    stringprocess(
void);
    
~stringprocess(void);
    
//int GetLongestCommonSequence(wstring x,wstring y,wstring result);
    void test();
private:
    
int *indexes;//声明指向指针的指针,保存两个字符串中的最长公共序列中的字符分别出现的位置。
    wstring xpart;//最大公共字序列的父串之一
    wstring ypart;//
    
 
};
该类的构造函数
stringprocess::stringprocess(void)
{
    indexes
=NULL;
}

该类的析构函数

stringprocess::~stringprocess(void)
{
    
if (indexes!=NULL)
    {
        cout
<<"指针成员变量已经被分配了堆内存,需要以delete模式释放"<<endl;    
        delete[] indexes;
        cout
<<"释放完毕"<<endl;
        
    }
    
else
    {
        cout
<<"指针成员变量为被分配堆内存,不需要以delete模式释放"<<endl;
    }
    
    cout
<<"destructor"<<endl;
}

该类中为指针数据成员分配堆内存的成员函数

为指针数据成员分配堆内存
void stringprocess::test()
{
    indexes
=new int[5];

}

主函数中测试调用:

int _tmain(int argc, _TCHAR* argv[])
{
    
    
    
    stringprocess p;
    p.test();
    cout
<<"finish"<<endl;
    
int f;
    cin
>>f;
    
}

输出结果:

如果主函数中不调用p的test函数则运行结果如下:

鉴于一般的C++入门课本仅提到“在构造函数中动态分配堆内存,在析构函数中释放”,以上内容仅供C++初学者参考之,避免造成思维固化。

原文地址:https://www.cnblogs.com/finallyliuyu/p/1984972.html