看板 C_and_CPP 關於我們 聯絡資訊
我想要實作一個類似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
ianfang:a沒被刪除沒錯 但你的fnx的x已經不在啦 11/03 10:38
ianfang:你的a也不會反映fnx的結果 因為這本來就是傳值呼叫 11/03 10:39
ianfang:然後你的問題是在於 你沒有定義copy Constructor 11/03 10:40
tinlans:寫這東西一定要有 copy ctor 跟 copy assignment。 11/04 13:04