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