作者LRM (小烏龜)
看板C_and_CPP
標題[問題] string destructor該如何實作?
時間Tue Nov 3 10:31:53 2009
我想要實作一個類似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