在笔试过程中,一直被问到一些STL源码的实现,趁着昨天刚写,今天把String类的实现整理出来,方便以后面试的时候用到。
class myString
{
public:
myString(const char* data=NULL);
myString(const myString& data);
myString& operator = (myString & data);
virtual ~myString();
public:
char* m_data;
};
myString::myString(const char* data )
{
if( data )
{
m_data = new char[strlen(data) + 1];
strcpy(m_data, data);
}
else
{
m_data = new char[1];
*m_data = '\0';
}
}
myString::~myString()
{
delete[] m_data;
}
myString::myString(const myString& data)
{
m_data = new char[strlen(data.m_data) + 1];
if( !m_data )
exit(1);
strcpy( m_data, data.m_data );
}
myString& myString::operator=(myString& data)
{
if( this == &data )
return *this;
else
{
delete[] m_data;
m_data = new char[strlen(data.m_data) + 1];
strcpy( m_data, data.m_data );
return *this;
}
}
最核心的因素就是每一次对myString类进行操作的时候,都要考虑1、内存分配与否,2、操作符重载时还要考虑内存是否需要重新分配(delete加new)。