首頁 >後端開發 >C++ >C 中何時需要使用者定義的複製建構函式?

C 中何時需要使用者定義的複製建構函式?

Susan Sarandon
Susan Sarandon原創
2024-10-24 04:39:02265瀏覽

When is User-Defined Copy Constructor Necessary in C  ?

C 中使用者定義的複製建構子

在C 中,編譯器通常會為類別產生一個預設的複製建構函數,該建構函式按成員執行複製。但是,在某些場景下,使用者定義的複製建構函數是必要的。

什麼時候需要使用者定義的複製建構子?

使用者定義的複製建構子是當預設複製建構子的成員複製行為不足時需要。考慮以下範例:

<code class="cpp">class Class {
public:
    Class(const char* str);
    ~Class();
private:
    char* stored;
};

Class::Class(const char* str) {
    stored = new char[srtlen(str) + 1];
    strcpy(stored, str);
}

Class::~Class() {
    delete[] stored;
}</code>

在此範例中,預設的複製建構函式將簡單地將指標複製到儲存的成員,而不是複製底層緩衝區。如果一個副本在另一個副本之前被銷毀,這可能會導致未定義的行為。

使用者定義的副本建構子

要解決此問題,您可以定義一個使用者定義的副本執行深度複製的建構子:

<code class="cpp">Class::Class(const Class& another) {
    stored = new char[strlen(another.stored) + 1];
    strcpy(stored, another.stored);
}</code>

此複製建構子分配新記憶體並複製儲存成員的內容,確保兩個副本都有自己獨立的緩衝區。

以上是C 中何時需要使用者定義的複製建構函式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn