一個合格的 String 類需正確管理動態記憶體,實現拷貝構造、移動構造、拷貝賦值、移動賦值、析構,並提供常用訪問接口。
class String {
char* data_;
public:
String() : data_(new char[1]) { *data_ = '\0'; }
String(const char* s) : data_(new char[strlen(s)+1]) { strcpy(data_, s); }
String(const String& rhs) : data_(new char[rhs.size()+1]) { strcpy(data_, rhs.c_str()); }
~String() { delete[] data_; }
String& operator=(String rhs) { swap(rhs); return *this; } // copy-and-swap
String(String&& rhs) noexcept : data_(rhs.data_) { rhs.data_ = nullptr; }
String& operator=(String&& rhs) noexcept { swap(rhs); return *this; }
size_t size() const { return strlen(data_); }
const char* c_str() const { return data_; }
void swap(String& rhs) { std::swap(data_, rhs.data_); }
};
手寫 String 類是考察 C++ 資源管理、規則 of three/five、異常安全、移動語義的綜合題,掌握上述模板即可應對大多數面試場景。