淺拷貝 C 編譯器預設提供的賦值運算子

2021-07-05 02:02:34 字數 719 閱讀 8803

#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 編譯器也不會幫你生成該類的預設建構函式。第二種情況是這個類的基類有預...