设计字符串类构造函数 C++

design a string class constructor c++

本文关键字:构造函数 C++ 字符串      更新时间:2023-10-16

设计字符串类构造函数的最佳方法是什么?以下构造函数肯定有问题:指向一个对象的两个指针,如果其中一个被破坏,另一个将导致致命错误。那么,为字符串类设计构造函数的最佳方法是什么?

class CMyString{
    private:
        char *pData;
    public:
        CMyString(char *_p=NULL):pData(_p){
    }
        CMyString(CMyString &_str):pData((_str.pData){
    }
}

例如,您可以按以下方式定义类。

class CMyString
{
private:
    char *pData;
public:
    CMyString( const char *_p = NULL )
    {
        if ( _p == NULL ) 
        {
            pData = NULL;
        }
        else
        {
            pData = new char[ std::strlen( _p ) + 1 ];
            std::strcpy( pData, _p );
        }
    }
    CMyString( const CMyString &_str )
    {
        if ( _str.pData == NULL ) 
        {
            pData = NULL;
        }
        else
        {
            pData = new char[ std::strlen( _str.pData ) + 1 ];
            std::strcpy( pData, _str.pData );
        }
    }
    explicit operator bool () const { return ( pData != NULL ); } 
    CMyString & operator =( const CMyString & ); // do not forget to define
    ~CMyString(); // do not forget to define
};

或者,您可以通过以下方式定义复制构造函数

    CMyString( const CMyString &_str ) : CMyString( _str.pData )
    {
    }

分配空间并复制字符。

另外,我建议不要允许pData为空,因为它会使逻辑复杂化。相反,如果未给出初始值,请创建一个空字符串。

另外,不要忘记保持正确。

CMyString(const char *_p = "") {
    size_t len = strlen(_p);
    pData = new char[len+1];
    strcpy(pData, _p);
}
CMyString(const CMyString& _str) { /* basically the same as above */ }