首先我給出一個(gè)類
class A
{
public:
???char *p;
???int nlen;
?? A();
?? A(const char *p1)
???{
????? nlen = strlen(p1);
??????p = new char[nlen+1];
??????strcpy(p,p1);
???}
};
void main()
{
???A a("Hello world");
?? A b = a;
}
如果沒有構(gòu)造拷貝函數(shù)的話,
這樣明顯會(huì)出現(xiàn)2個(gè)問題,
1.a.p和b.p指向同一個(gè)內(nèi)存區(qū)域
//2.a.p資源沒有釋放
3.a和b調(diào)用了默認(rèn)析構(gòu)函數(shù)的話,同一個(gè)資源被釋放了2次.
這就是沒有構(gòu)造拷貝函數(shù)的缺陷
在class A中加入
/*-----------------------------add?method ------------*/
A(const A & a1)
{
???nlen = strlen(a1.p);
???p?= new char[nlen+1];
? strcpy(p,p1);
}
/*------------------------------end add ---------------*/
這樣就加入了構(gòu)造拷貝函數(shù)
明顯上面的問題可以解決,
我們可以寫更美觀一點(diǎn)的代碼
void main()
{
???A a("Hello World");
???A b(a);
???cout <<"debug breakpoint is setted here"<<endl;
}