#define _crt_secure_no_warnings
#include
using
namespace
std;
class vertify
//對症下藥,指標變數需要重新分配記憶體以獲得不同的位址值,這樣delete時不會重複釋放記憶體。
vertify(const vertify & obj)
void
operator= (vertify & obj)
~vertify()
size_ = 0;
}public:
int size_;
char* pname_;
};int main()
cin.get();
return0;}
注:思考下v1= v2後,v1物件原來所分配的記憶體有沒有釋放?
解決方案:
在過載=的函式中,先釋放記憶體,再重新開闢記憶體。
void
operator= (vertify & obj)
cout
<< "=運算子過載"
size_ = obj.size_;
this->pname_ = new
char[size_ + 1];
strcpy(pname_, obj.pname_);
}
C 編譯器何時提供預設的建構函式和拷貝建構函式
2008年08月27日 星期三 10 16 總的來說,編譯器只在它需要的時候才會合成乙個預設建構函式,或者擴張所有已存在的建構函式。乙個類滿足下列其中任何乙個條件 1.包含了乙個類的物件,這個物件有乙個建構函式 包括編譯器合成的預設建構函式 2.如果繼承自一些基類,其中某些基類有乙個建構函式 包括編...
C 編譯器何時為使用者提供預設建構函式
第一種是類成員中有成員是類物件,並且該成員的類含有預設建構函式,那麼c 編譯器會幫你給這個類也生成乙個預設建構函式,用來呼叫其成員物件的建構函式,完成該成員的初始化構造。需要強調的是,如果這個成員的類也沒有給出缺省建構函式,那麼c 編譯器也不會幫你生成該類的預設建構函式。第二種情況是這個類的基類有預...
C 編譯器何時為使用者提供預設建構函式
第一種是類成員中有成員是類物件,並且該成員的類含有預設建構函式,那麼c 編譯器會幫你給這個類也生成乙個預設建構函式,用來呼叫其成員物件的建構函式,完成該成員的初始化構造。需要強調的是,如果這個成員的類也沒有給出缺省建構函式,那麼c 編譯器也不會幫你生成該類的預設建構函式。第二種情況是這個類的基類有預...