亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

動態分配對象數組

動態分配對象數組

C++
一只斗牛犬 2019-07-10 10:45:19
動態分配對象數組這是一個初學者的問題,但我已經很長時間沒有做C+了,下面是.我有一個類,它包含一個動態分配的數組,比如說class A{     int* myArray;     A()     {         myArray = 0;     }     A(int size)     {         myArray = new int[size];     }     ~A()     {         // Note that as per MikeB's helpful style critique, no need to check against 0.         delete [] myArray;     }}但是現在我想要為這些類創建一個動態分配的數組。以下是我的當前代碼:A* arrayOfAs = new A[5];for (int i = 0; i < 5; ++i){     arrayOfAs[i] = A(3);}但這會爆炸得很厲害。因為新的A對象創建(使用A(3)(調用)在for循環迭代完成,這意味著內部myArray其中A實例獲取delete []-艾德所以我覺得我的語法肯定錯了?我想有幾個修復方法看起來有點過火,我希望避免:創建副本構造函數A.使用vector<int>和vector<A>所以我不用擔心這些。而不是arrayOfAs是一個數組A對象,它是否是A*指南針。我認為這只是一些初學者的事情,在嘗試動態分配具有內部動態分配的事物時,語法實際上是有效的。(還有,風格批評很受歡迎,因為我做C+已經有一段時間了。)為未來觀眾提供最新信息:下面的所有答案都很有幫助。因為示例代碼和有用的“規則4”,Martin的代碼被接受了,但我確實建議閱讀它們。一些是好的,簡潔的陳述什么是錯誤的,還有一些正確地指出了如何和為什么vector這是個很好的方法。
查看完整描述

3 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

我建議使用std:載體:類似于

typedef std::vector<int> A;typedef std::vector<A> AS;

STL的輕微過度沒有什么問題,你可以花更多的時間來實現你的應用程序的特定功能,而不是重新發明自行車。


查看完整回答
反對 回復 2019-07-10
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

A對象的構造函數動態分配另一個對象,并將指向該動態分配對象的指針存儲在原始指針中。

在這種情況下,你定義您自己的復制構造函數、賦值運算符和析構函數。生成的編譯器將不能正常工作。(這是“三大定律”的必然結果:具有任意析構函數、賦值運算符、復制構造函數的類通常需要全部3)。

您已經定義了自己的析構函數(并且提到了創建副本構造函數),但是您需要定義三大構造函數中的另外兩個。

另一種方法是存儲指向動態分配的指針。int[]會幫你處理這些事情。有點像vector<int>(如你所述)或boost::shared_array<>.

要將其歸結為-為了最大限度地利用Raii,您應該盡可能避免處理原始指針。

由于您要求其他樣式的批判性,次要的是當您刪除原始指針時,您不需要在調用之前檢查0。deletedelete通過不做任何操作來處理這種情況,這樣您就不必將代碼與檢查混淆。


查看完整回答
反對 回復 2019-07-10
  • 3 回答
  • 0 關注
  • 669 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號