作者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
1F:→ ianfang:a没被删除没错 但你的fnx的x已经不在啦 11/03 10:38
2F:→ ianfang:你的a也不会反映fnx的结果 因为这本来就是传值呼叫 11/03 10:39
3F:→ ianfang:然後你的问题是在於 你没有定义copy Constructor 11/03 10:40
4F:→ tinlans:写这东西一定要有 copy ctor 跟 copy assignment。 11/04 13:04