[問題] string destructor該如何實作?
我想要實作一個類似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
11/03 10:38, 1F
→
11/03 10:39, , 2F
11/03 10:39, 2F
→
11/03 10:40, , 3F
11/03 10:40, 3F
→
11/04 13:04, , 4F
11/04 13:04, 4F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章