c 的引用計數與寫時複製

2021-04-25 22:56:30 字數 1252 閱讀 4306

最近看了c++沉思錄,了解一下控制代碼類,其中的引用計數,寫時複製技術很值得學習,特將它摘抄下來,希望它對大家也有用。

//原始類

class cpoint

cpoint(int x, int y): xval(x), yval(y)

{}int x() const

int y() const

cpoint& x(int xv)

cpoint& y(int yv)

private:

int xval;

int yval;

};//引用計數類

class usecount

;usecount::usecount(): p(new int(1))

{}usecount::usecount(const usecount& u): p(u.p)

//返回值為true 需要刪除宿主類的賦值

bool usecount::reattach(const usecount& u)

p = u.p;

return false;

}//寫時複製

bool usecount::makeonly()

--*p;

p = new int(1);

return true;

}int usecount::getcount()

usecount::~usecount()

}//確保只有乙個引用

bool usecount::only()

//控制代碼類

class handle

;handle::handle(): p(new cpoint)

handle::handle(int x, int y): p(new cpoint(x, y))

handle::handle(const cpoint& p0): p(new cpoint(p0))

handle::handle(const handle& h): u(h.u), p(h.p)

handle& handle::operator=(const handle& h)

p = h.p;

return *this;

}handle::~handle()

}int handle::getcount()

int handle::x() const

handle& handle::x(int x0)

p->x(x0);

return *this;

}

C 引用計數寫時拷貝

寫時拷貝技術原理 寫時拷貝技術是通過 引用計數 實現的,在分配空間的時候多分配4個位元組,用來記錄有多少個指標指向塊空間,當有新的指標指向這塊空間時,引用計數加一,當要釋放這塊空間時,引用計數減一,直到引用計數減為0時才真的釋放掉這塊空間。當有的指標要改變這塊空間的值時,再為這個指標重新分配自己的空...

引用計數的寫時拷貝

首先我們需要知道什麼是寫時拷貝,通俗的說,就是寫的時候再拷貝。那到底什麼才是寫時拷貝呢?舉乙個很簡單的例子,就是建立乙個string類的物件,然後用這個物件再拷貝出多個物件,當然指標也會拷貝過去,造成多個物件指向同一塊空間,當對某個物件進行讀操作時,不會發生什麼問題,但當需要對某個物件進行寫操作時,...

string類的寫時拷貝與引用計數

由於淺拷貝使多個物件共用一塊記憶體位址,呼叫析構函式時導致一塊記憶體被多次釋放,導致程式奔潰。實現string類的時候通常顯示的定義拷貝建構函式和運算子過載函式。由於釋放記憶體空間,開闢記憶體空間時花費時間,因此,在我們不需要寫,只是讀的時候就可以不用新開闢記憶體空間,就用淺拷貝的方式建立物件,當我...