c析構函式想寫簡單的string類

2021-12-29 05:22:12 字數 2208 閱讀 9378

1樓:篤俠

這個析構函式問題不大,倒是建構函式和賦值運算子函式有點小問題:

它們中的

p=new char[k];

應改為p=new char[k+1];

另外,賦值運算子函式中的處理和返回型別也不對,應該是這樣的:

stri& operator=(char *ch)//----------------------------賦值函式

2樓:種燒餅的怪叔叔

1)p=new char[k];有誤,忽略了'\0'的位置2)haha.p=new char[haha.k];同樣問題3)return haha;返回的是引用,但是haha成員是在函式體建立的,他的生命週期在函式呼叫結束時候消失

4)析構函式暫時沒看出什麼問題(對於第三點,如果返回型別改為返回值而不是引用,那麼由於沒有定義拷貝建構函式,析構函式將對haha.p指向的空間執行兩次delet,那麼就會彈出錯誤,補救:定義拷貝建構函式,使用深拷貝而不是淺拷貝。)

3樓:高樓尋縫

delete之前應判斷p是否為null。

這個c++析構函式要怎麼寫?

4樓:拒絕996的瀟灑程式設計師

這不是析構函式的問題,你這個類的建構函式是乙個死迴圈:

每一次宣告cpeople,建構函式就會再構造乙個cpeople p, 這個p會做同樣的事,。。。,沒有頭。

更改方法是,不要把 p=new cpeople();寫入建構函式中,相反在建構函式中把p初始化為null, 即 p = null。 而使用乙個單獨的public函式執行此句,比如:

public:

cpeople* getp()

析構函式刪除p沒有任何問題:

~cpeople()

在p這一層,因為p->p ==null,不會出現迭代析構問題。

5樓:匿名使用者

這類寫的有意思。。。嘿嘿

看一樓,一樓解釋的很清楚了。 最好把防止複製物件,把operator = 和複製建構函式設為private。

ps:已經回答,請檢視。

ps的ps:

那帖子已經達到修改上限,在這裡修改了。

你說的對,那類是自我呼叫,每次new的時候已經初始化了next了。

剛才又看了下,是析構函式中的問題。

while迴圈中

上乙個物件已經把它析構了,然而它自己本身while還是在迴圈析構後面的,每個物件都是這樣,所以會錯誤。

6樓:匿名使用者

~cpeople()

誰幫我編乙個c++程式,要類中顯示定義建構函式和析構函式。簡單一點就好。

7樓:

樓上的程式好多錯誤!

建構函式和複製建構函式之間是過載關係。

#include

using namespace std;

class person

;person::person(char * name,int age)

:m_age(age) // 有構造函式引數初始化表;

person::person(const person & rp)person::~person()

此程式已執行過了。能夠說明你的問題!

已經是最簡單的了。

8樓:

class person

person(const char *name,const int age):m_name(0),m_age(age)

~person()

};如果想系統的學習c++語言,可以參考一下c++ primer

9樓:

#include

using namespace std;

const double pi = 3.14;

class circle

// 預設建構函式

circle( double r ) : r0( r ) // 初始化半徑

~circle( ) // 析構函式

double area( ) // 求面積private:

double r0; // 半徑};int main( )

c 析構函式何時會被呼叫,C 析構函式何時會被呼叫?

析構函式 destructor 與建構函式相反,當物件脫離其作用域時 例如物件所在的函式已呼叫完畢 系統自動執行析構函式。析構函式往往用來做 清理善後 的工作 例如在建立物件時用new開闢了一片記憶體空間,應在退出前在析構函式中用delete釋放 c 中的每個類都會有乙個析構函式,當這個類的物件被銷...

c 中析構函式可以實現什麼,c 中的虛擬析構函式有什麼作用?

析構函式名與類名相同,只是在函式名前面加乙個位取反符 例如 stud 以區別於建構函式。它不能帶任何引數,也沒有返回值 包括void型別 只能有乙個析構函式,不能過載。如果使用者沒有編寫析構函式,編譯系統會自動生成乙個預設的析構函式 即使自定義了析構函式,編譯器也總是會為我們合成乙個析構函式,並且如...

C什麼時候需要用到析構函式,C 中析構函式具體是什麼時候被呼叫

有點偏頗.析構函式 是在你的類執行 結束後 再執行的方法。釋放資源只的他的乙個作用之一。必須說這類執行結束了,你操作其它的類或者其它的內容就用到它了。釋放資源只是它作用一種。如果是託管了,系統就會自己幫你釋放的。不過有的程式設計師控制能力比較強,託管的也自己來操作釋放。這樣可以系統資源最大話利用。析...