class String
{
public:
String(const char* cstr = 0);
String(const String& str); // 拷贝构造
String& operator=(const String& str); // 拷贝赋值
~String();
char* get_c_str() const { return m_data; }
private:
char* m_data;
};
inline
String::String(const char* cstr = 0)
{
if(cstr) {
m_data = new char[strlen(cstr) + 1];
strcpy(m_data, cstr);
}
else { // 未指定值
m_data = new char[1];
*m_data = '\0';
}
}
inline
String::~String()
{
delete[] m_data; // 由于这个是动态分配的,所以需要手动清除
}
{
String s1();
String s2("hello");
String* p = new String("hello");
delete p;
}
备注:
String s1(); 、 String s2("hello"); 不是动态分配的,当其离开作用域之后会自动调用析构函数
而String* p = new String("hello");是动态分配的,需要自调用析构函数!!!