c 深拷貝 函式後加const

2021-07-10 19:08:05 字數 910 閱讀 2856

簡單的來說就是,在有指標的情況下,淺拷貝只是增加了乙個指標指向已經存在的記憶體,而深拷貝就是增加乙個指標並且申請乙個新的記憶體,使這個增加的指標指向這個新的記憶體,採用深拷貝的情況下,釋放記憶體的時候就不會出現在淺拷貝時重複釋放同一記憶體的錯誤!

#include #include using namespace std;

class mystring

;int mystring::numberofobjects = 0;

//deep step

mystring::mystring(const char *inputstr)

//字串最後一位要自己加空字元

mystring::mystring(int size_t, char a)

// deep copy step

mystring::mystring(const mystring& _str)

//delete deep copy

mystring::~mystring()

const char* mystring::c_str() const

int mystring::getnumberofobjects()

這裡有個比較小的細節,在const char* c_str()這個函式後面要加const。

根據ta的解釋,是因為不加const的話會導致

const char* t = _str.c_str();
這裡編譯錯誤,因為傳進來的引數宣告為const mystring& _str,然後我們直接呼叫了_str這個物件的成員函式c_str(),它非常擔心這個成員函式會改變_str的值(雖然這個函式並不會改變_str的值,可是你不把c_str()這個函式宣告為const,它不放心呼叫啊,萬一被改了呢)

c 函式後加const

函式後加const的三種情況 1 非靜態成員函式後面加const 加到非成員函式或靜態成員後面會產生編譯錯誤 2 表示成員函式隱含傳入的this指標為const指標,決定了在該成員函式中,任意修改它所在的類的成員的操作都是不允許的 因為隱含了對this指標的const引用 唯一的例外是對於mutab...

C 函式後加const的意義

一些成員函式改變物件,一些成員函式不改變物件。例如 int point gety 這個函式被呼叫時,不改變point物件,而下面的函式改變point物件 void point setpt int x,int y 為了使成員函式的意義更加清楚,我們可在不改變物件的成員函式的函式原型中加上const說明...

C 中成員函式後加const

注 以下內容來自網路,感謝的整理 非靜態成員函式後面加const 加到非成員函式或靜態成員後面會產生編譯錯誤 表示成員函式隱含傳入的this指標為 const指標,決定了在該成員函式中,任意修改它所在的類的成員的操作都是不允許的 因為隱含了對this指標的const引用 唯一的例外是對於 mutab...