std::basic_string
是 C++ 標(biāo)準(zhǔn)庫中的一個(gè)模板類,用于表示字符串。它有一個(gè)拷貝構(gòu)造函數(shù),用于創(chuàng)建一個(gè)新的 basic_string
對象,該對象是另一個(gè) basic_string
對象的副本??截悩?gòu)造函數(shù)的實(shí)現(xiàn)通常由編譯器自動生成,但你也可以自己實(shí)現(xiàn)一個(gè)拷貝構(gòu)造函數(shù)。
下面是一個(gè)簡單的 basic_string
拷貝構(gòu)造函數(shù)實(shí)現(xiàn)示例:
#include<iostream>
#include <cstring> // for std::strcpy, std::strlen
template<typename CharT>
class basic_string {
public:
// 默認(rèn)構(gòu)造函數(shù)
basic_string() : data_(nullptr), size_(0) {}
// 從 C 風(fēng)格字符串構(gòu)造
basic_string(const CharT* str) {
size_ = std::strlen(str);
data_ = new CharT[size_ + 1];
std::strcpy(data_, str);
}
// 拷貝構(gòu)造函數(shù)
basic_string(const basic_string& other) {
size_ = other.size_;
data_ = new CharT[size_ + 1];
std::strcpy(data_, other.data_);
}
// 析構(gòu)函數(shù)
~basic_string() {
delete[] data_;
}
// 其他成員函數(shù)...
private:
CharT* data_;
size_t size_;
};
int main() {
basic_string<char> str1("Hello, world!");
basic_string<char> str2(str1); // 使用拷貝構(gòu)造函數(shù)
std::cout << "str1: "<< str1.c_str()<< std::endl;
std::cout << "str2: "<< str2.c_str()<< std::endl;
return 0;
}
在這個(gè)示例中,我們定義了一個(gè)簡單的 basic_string
類,并實(shí)現(xiàn)了拷貝構(gòu)造函數(shù)??截悩?gòu)造函數(shù)接受一個(gè) const basic_string&
參數(shù),然后分配足夠的內(nèi)存來存儲副本,并使用 std::strcpy
將原始字符串復(fù)制到新分配的內(nèi)存中。注意,這個(gè)示例僅適用于字符類型為 char
的情況。如果你需要處理其他字符類型(如 wchar_t
),你需要相應(yīng)地修改代碼。