[問題] string destructor該如何實作?

看板C_and_CPP (C/C++)作者 (小烏龜)時間16年前 (2009/11/03 10:31), 編輯推噓0(004)
留言4則, 2人參與, 最新討論串1/2 (看更多)
我想要實作一個類似string的類別 想法如下: class CMyString { public: CMyString(); ~CMyString(); char * m_pBuffer; unsigned int m_nLength; }; CMyString::CMyString() : m_pBuffer(NULL), m_nLength(0) {} CMyString::~CMyString(){ if(m_pBuffer) delete [] m_pBuffer; } 結果,當參數傳值呼叫函式時,會發生問題! 比如說: void fnx(CMyString str){ return; } 離開fnx時,~CMyString()會把str的m_pBuffer刪除掉!這不是我想要的結果! 目前我的暫時解法是將參數傳址或指標, 改成void fnx(CMyString * str)來避免呼叫~CMyString() 不過,使用CString 或 string,好像就沒這方面的困擾? 比如說: void fnx(string x){ return; } void main(){ string a; fnx(a); } 工作正常,a並沒有被刪除 好奇整個string的架構是怎麼辦到可以傳值呼叫的? 這樣子不會造成memory leak嗎? 還是它有自己的一套free()隱藏在背後? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.22.10

11/03 10:38, , 1F
a沒被刪除沒錯 但你的fnx的x已經不在啦
11/03 10:38, 1F

11/03 10:39, , 2F
你的a也不會反映fnx的結果 因為這本來就是傳值呼叫
11/03 10:39, 2F

11/03 10:40, , 3F
然後你的問題是在於 你沒有定義copy Constructor
11/03 10:40, 3F

11/04 13:04, , 4F
寫這東西一定要有 copy ctor 跟 copy assignment。
11/04 13:04, 4F
文章代碼(AID): #1AxvOR3f (C_and_CPP)
文章代碼(AID): #1AxvOR3f (C_and_CPP)