[英]Linked List: How to implement Destructor, Copy Constructor, and Copy Assignment Operator?
這是我的 C++ 代碼: 我是 C++ 的初學者,在這段代碼中,我練習了如何合並兩個鏈表。 這實際上工作得很好。 我已經成功地按排序順序合並了兩個鏈表。 但是,有人說我應該遵循 C++的三原則。 其中實現: Destructor 、 Copy Constructor和Copy Assignme ...
[英]Linked List: How to implement Destructor, Copy Constructor, and Copy Assignment Operator?
這是我的 C++ 代碼: 我是 C++ 的初學者,在這段代碼中,我練習了如何合並兩個鏈表。 這實際上工作得很好。 我已經成功地按排序順序合並了兩個鏈表。 但是,有人說我應該遵循 C++的三原則。 其中實現: Destructor 、 Copy Constructor和Copy Assignme ...
[英]Allocating memory - Pointers
我想知道何時或是否必須刪除此 object。 這是基本的 class Object Object.cpp 的構造函數: 我知道在分配 memory 時應該在某個時候刪除它,但我已經在構造函數中分配了 memory 並且想再次使用變量一和二。 我什么時候刪除它們? ...
[英]What is the difference between declaring a copy constructor with "= default" or not declaring it at all?
我試圖了解自動生成的各種功能的編譯器代碼的行為,例如: 析構函數復制構造函數賦值運算符移動構造函數移動賦值運算符與未聲明的情況相比,使用“= default”聲明它們會導致任何功能差異嗎? 上面列出的函數對這個問題的回答是否不同? 如果沒有功能差異,使用這兩種情況的后果是什么? 使用“= defa ...
[英]Copy constructor of a class containing a smart pointer
在下面的示例中,我們有一個類Class ,其中包含一個Bridge對象,該對象負責為我們處理所有內存(三規則)。 現在,我剛剛了解了智能指針,並嘗試使用unique_ptr重新創建上面的示例。 據我了解,我們基本上不需要自己實現 3 的規則,因為智能指針已經包含它了。 為了測試這一點,我做了以下 ...
[英]How do smart pointers affect the rule of 5?
我了解到,當您在 class 中使用指針時,您應該執行 5 規則。如果您不使用指針,那么您可以,實際上更可取的是使用默認值。 但是,這如何與智能指針一起使用? 例如,包含int*的 class 可能如下所示: 但是如果我們使用智能指針,這樣做就足夠了嗎? ...
[英]Hash table - issue with destructor (pointer being freed was not allocated)
我有一個 HashTable,其中通過鏈接(鏈表)處理沖突。 每個鏈表的第一個節點都有一個來自每個數組位置的指針。 下面顯示的是一個常規構造函數以及 3 個函數的規則。 盡管我的代碼正在編譯並且我的函數(添加、刪除等)正在生成正確的輸出,但我在析構函數(IDE 使用線程 1:信號 SIGABRT ...
[英]Creating object with Copy Constructor (Simple Rule of Three Class) yields run-time error
我有下面的簡單程序: 我試圖構造一個簡單的三班規則。 我在此Counter z{x};上獲得UB Counter z{x}; 應該調用副本構造函數。 輸出: 然后重復ctor\\ncctor ... 自從我使用C ++已經有一段時間了。 我就是找不到錯誤! ...
[英]“attempting to reference a deleted function” for copy constructor
我正在努力使規則趨向於5。 我有一個Renderable類,它定義了一個自定義析構函數,因此它似乎是Rule of 5的理想候選者。該類在其構造函數中創建了一些資源,因此我的第一個念頭是我應該防止復制: 我還有另一個類Unit ,它在其構造函數的初始化列表中創建一個Renderab ...
[英]Implementation of "Rule of Three" gone wrong
下面是我試圖理解的“三規則”的錯誤實現。 調試程序時,我發現調試器在清理int *k出現問題,這可以通過定義int *k = nullptr或簡單地在復制構造函數中將其設置為合理的值來解決。 但是,我不明白由此產生的程序錯誤(訪問沖突)是如何產生的。 我知道,在復制賦值構造函數v1的int * ...
[英](c++) stl vector implemenation
我已經實現了一個簡單的類似矢量的結構,如果我使用vector<int>和vector<char>它會很好地工作,但是當我使用<vector<vector<int>>它會出錯是否存在關於vector stl的良好實現代碼?我的代碼有問題嗎? ...
[英]recursive call in copy constructor
我遵循三個規則實施了一個類,但遇到了崩潰。 通過調試,我得出的結論是,復制構造函數正在反復調用自身,而不是調用相等運算符。 為什么會這樣呢? 它不應該調用相等運算符嗎? ...
[英]C++ weird behaviour with stack variables and functions
我有一個帶char* buffer和unsigned int length的String類。 字符串類具有兩個構造函數: 和一個破壞者 它使用delete[] buffer;刪除char數組delete[] buffer; 。 兩個構造函數都創建一個新的緩沖區數組b ...
[英]Must a c++ interface obey the rule of five?
定義接口類時聲明實例化方法的正確方法是什么? 出於顯而易見的原因,抽象基類需要具有虛擬析構函數。 但是,隨后給出了以下編譯警告:“‘InterfaceClass’定義了非默認析構函數,但未定義復制構造函數、復制賦值運算符、移動構造函數或移動賦值運算符”,這是“五分法則” '。 我理解為什么一般應 ...
[英]points not accessible after QVector insert function
我試圖遵循三個規則 ,但是這樣做特別引起了QVector的insert函數的問題。 添加復制構造函數和析構函數后,我的程序將產生一個錯誤,其中不再可以訪問點向量,因此復制構造函數無法重新分配點。 這是我的代碼中的一些片段 現在,我使用qVector來按其面積對一組“形狀”對象 ...
[英]Why does deletion of Actor pointer result in “Program.exe has triggered a breakpoint”
我正在嘗試創建一個指向另一個Actor對象的Actor指針,如下所示: 然后,當我嘗試delete ptr ,它導致運行時錯誤: Program.exe已觸發斷點 但是,當我創建一個新的Actor而不是將ptr分配給other的引用時,我可以安全地delete它,而不會 ...
[英]Rule of 3 Default Member Deprecation in C++11
根據下面廣為人知的表,當用戶提供一個或多個復制賦值,復制構造函數和析構函數時,C ++ 11中不推薦使用默認復制構造函數和復制賦值的自動編譯器生成(紅色單元格表示棄用)。 根據“3規則”,這是完全合理的。 但是,該表顯示在用戶提供的復制構造函數/賦值的情況下,不會棄用默認析構函數的生成。 ...
[英]Linked List copy constructor crashing program
我不確定為什么我的復制構造函數似乎使程序崩潰,其他所有函數在鏈表類中都沒問題。 5的規則現在確實使我對實現感到困惑。 如果有人對我要去哪里有任何指示或指導,請告訴我,謝謝。 DList ctor: 析構函數和復制構造函數: 主要: 崩潰前的輸出: ...
[英]What is a resource in C++?
關於此主題: 什么是復制和交換慣用法? 它指出一類最多應該處理一種資源。 資源是什么意思? 編輯:例如,我有一個類處理每個監視器的信息,並包含一個桌面像素數組。 數組和僅數組會被視為資源嗎? 包含監視器信息的監視器陣列和桌面像素陣列是否會需要另一種資源? 在另一堂課中,但這是 ...
[英]C++ Overloading assignment operator for dynamic multi dimensional array error
我在用動態數組重載=運算符時遇到麻煩。 到目前為止,這就是我所擁有的。 我也知道我還沒有寫我的析構函數或構造函數,但是我需要首先關注這個運算符: 在我的頭文件中: ...
[英]Segmentation fault; rule of three
我有這樣的頭文件 然后在我的.cpp文件中寫下這一行 這導致了細分錯誤。 我想這是由於三個規則。 然后我添加了這部分;復制構造函數和賦值構造函數 還是行不通。 請任何人幫助我解決此問題。 謝謝 ...