第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

動(dòng)態(tài)分配對(duì)象數(shù)組

動(dòng)態(tài)分配對(duì)象數(shù)組

C++
一只斗牛犬 2019-07-10 10:45:19
動(dòng)態(tài)分配對(duì)象數(shù)組這是一個(gè)初學(xué)者的問(wèn)題,但我已經(jīng)很長(zhǎng)時(shí)間沒(méi)有做C+了,下面是.我有一個(gè)類(lèi),它包含一個(gè)動(dòng)態(tài)分配的數(shù)組,比如說(shuō)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;     }}但是現(xiàn)在我想要為這些類(lèi)創(chuàng)建一個(gè)動(dòng)態(tài)分配的數(shù)組。以下是我的當(dāng)前代碼:A* arrayOfAs = new A[5];for (int i = 0; i < 5; ++i){     arrayOfAs[i] = A(3);}但這會(huì)爆炸得很厲害。因?yàn)樾碌腁對(duì)象創(chuàng)建(使用A(3)(調(diào)用)在for循環(huán)迭代完成,這意味著內(nèi)部myArray其中A實(shí)例獲取delete []-艾德所以我覺(jué)得我的語(yǔ)法肯定錯(cuò)了?我想有幾個(gè)修復(fù)方法看起來(lái)有點(diǎn)過(guò)火,我希望避免:創(chuàng)建副本構(gòu)造函數(shù)A.使用vector<int>和vector<A>所以我不用擔(dān)心這些。而不是arrayOfAs是一個(gè)數(shù)組A對(duì)象,它是否是A*指南針。我認(rèn)為這只是一些初學(xué)者的事情,在嘗試動(dòng)態(tài)分配具有內(nèi)部動(dòng)態(tài)分配的事物時(shí),語(yǔ)法實(shí)際上是有效的。(還有,風(fēng)格批評(píng)很受歡迎,因?yàn)槲易鯟+已經(jīng)有一段時(shí)間了。)為未來(lái)觀眾提供最新信息:下面的所有答案都很有幫助。因?yàn)槭纠a和有用的“規(guī)則4”,Martin的代碼被接受了,但我確實(shí)建議閱讀它們。一些是好的,簡(jiǎn)潔的陳述什么是錯(cuò)誤的,還有一些正確地指出了如何和為什么vector這是個(gè)很好的方法。
查看完整描述

3 回答

?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

我建議使用std:載體:類(lèi)似于

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

STL的輕微過(guò)度沒(méi)有什么問(wèn)題,你可以花更多的時(shí)間來(lái)實(shí)現(xiàn)你的應(yīng)用程序的特定功能,而不是重新發(fā)明自行車(chē)。


查看完整回答
反對(duì) 回復(fù) 2019-07-10
?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

A對(duì)象的構(gòu)造函數(shù)動(dòng)態(tài)分配另一個(gè)對(duì)象,并將指向該動(dòng)態(tài)分配對(duì)象的指針存儲(chǔ)在原始指針中。

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

您已經(jīng)定義了自己的析構(gòu)函數(shù)(并且提到了創(chuàng)建副本構(gòu)造函數(shù)),但是您需要定義三大構(gòu)造函數(shù)中的另外兩個(gè)。

另一種方法是存儲(chǔ)指向動(dòng)態(tài)分配的指針。int[]會(huì)幫你處理這些事情。有點(diǎn)像vector<int>(如你所述)或boost::shared_array<>.

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

由于您要求其他樣式的批判性,次要的是當(dāng)您刪除原始指針時(shí),您不需要在調(diào)用之前檢查0。deletedelete通過(guò)不做任何操作來(lái)處理這種情況,這樣您就不必將代碼與檢查混淆。


查看完整回答
反對(duì) 回復(fù) 2019-07-10
  • 3 回答
  • 0 關(guān)注
  • 661 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)