溫馨提示×

c++ basic_string的拷貝構(gòu)造函數(shù)如何實(shí)現(xiàn)

c++
小樊
81
2024-09-10 15:18:33
欄目: 編程語言

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)地修改代碼。

0