首頁 > 後端開發 > C++ > 主體

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

Susan Sarandon
發布: 2024-10-24 04:39:02
原創
174 人瀏覽過

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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!