c 類管理指標成員

2021-09-06 13:19:49 字數 1606 閱讀 2669

c++程式設計提倡使用標準庫,乙個原因是標準庫大膽減少對指標的使用。但是許多程式是離不開指標的。包含指標的類需要特別注意複製控制,原因是複製指標時只複製指標中的位址,而不複製指標所指向的物件。這樣當把乙個物件複製給另乙個物件後,當改變乙個物件後,另乙個物件也會收到牽連。另外乙個物件釋放掉後,其指標已經被釋放掉。而另乙個物件還不知道,其實該物件中的指標已經成為懸垂指標。這樣再操作就會出現錯誤。

1. 定義智慧型指標類

原理:定義乙個計數的類,所有複製的都是指向這乙個類,每複製一次,該類加1一次;每析構一次,該類減1一次。當次數為0時,釋放掉動態申請的空間。

圖例:

1)定義乙個物件

2)複製乙個物件

//定義計數類

class

u_ptr

~u_ptr()

int *ip;

size_t use; //次數

};class

hasptr

hasptr(

const hasptr &orig) : ptr(orig.ptr), val(orig.val)

hasptr& operator=(const hasptr &orig);

~hasptr()

private

: u_ptr *ptr;

intval;

};hasptr& hasptr::operator=(const hasptr &orig)

intmain()

2. 定義值型類給指標成員提供語義值。具有值語義的類所定義的物件,其行為很像算術型別的物件:複製值型物件時,會得到乙個不同的版本。對副本的改變不會反映在原有物件上。

#include #include 

using

namespace

std;

class

hasptr

hasptr(

const hasptr &orig) : ptr(new

int(*orig.ptr)), val(orig.val) //複製值型物件時,會得到乙個不同的版本

hasptr& operator=(const hasptr &orig);

~hasptr()

private

:

int *ptr;

intval;

};hasptr& hasptr::operator=(const hasptr &orig)

intmain()

C 管理指標成員

1 c 中一般採用下面三種方法之一管理指標成員 1 指標成員採取常規行為。這樣的類具有指標的所有缺陷 具有指標成員且使用預設複製建構函式和賦值操作符,無法避免懸垂指標 兩個物件的指標成員指向同一記憶體,刪除了其中乙個指標指向的記憶體時,另乙個指標將不再指向有效的記憶體空間 2 類可以實現所謂的 智慧...

C 類成員指標

類成員指標 1.成員指標式可以指向類的非靜態成員的指標。類的靜態成員不屬於任何物件,因此無需特殊的指向靜態成員的指標。指向靜態成員的指標的普通指標沒有任何區別。2.當初始化乙個類成員指標時,我們令其指向類的成員,但不指定代成員所屬的物件,直到使用到成員指標時,才提供所屬的物件。3.資料成員指標 例 ...

C 類成員指標

首先讓我們看一下,乙個簡單的成員變數指標 和 成員函式指標的使用例子。struct a int a pi a i void a pfoo a foo a a a.pi 1 等同於 a.i 1 a.pfoo 等價於 a.foo 在vc 下,輸出 a i 和 a foo 的值,你會發現他們的值都為1 在...