首頁 > 後端開發 > C++ > 什麼時候應該在 C 中實作使用者定義的複製建構函式?

什麼時候應該在 C 中實作使用者定義的複製建構函式?

Mary-Kate Olsen
發布: 2024-10-23 17:49:49
原創
1048 人瀏覽過

When Should You Implement a User-Defined Copy Constructor in C  ?

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

C 編譯器會自動為類別產生一個複製建構函數,該構造函數以成員方式執行預設複製。然而,在某些情況下,我們可能需要定義自己的使用者定義的複製建構函式。

定義使用者定義的複製建構子的原因:

  • 深度複製:當類別的成員變數分配需要單獨複製的動態記憶體時,逐成員複製是不夠的。在這種情況下,需要使用者定義的複製建構函式來執行深度複製,這會為物件的成員變數建立動態記憶體的新副本。

範例:

考慮以下儲存字串的類別:

<code class="cpp">class Class {
public:
    Class(const char* str);
    ~Class();
private:
    char* stored;
};</code>
登入後複製

使用預設的複製建構函數,儲存的成員只能透過引用複製,當其中一個副本被複製時,會導致未定義的行為被毀了。為了防止這種情況,我們定義了一個執行深度複製的使用者定義的複製建構子:

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

此外,賦值運算子也需要使用者定義的複製建構函式才能正確執行深度複製:

<code class="cpp">void Class::operator = (const Class& another) {
    char* temp = new char[strlen(another.stored) + 1];
    strcpy(temp, another.stored);
    delete[] stored;
    stored = temp;
}</code>
登入後複製

以上是什麼時候應該在 C 中實作使用者定義的複製建構函式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板