C 管理指標成員

2021-07-03 16:39:07 字數 2315 閱讀 5364

1、c++中一般採用下面三種方法之一管理指標成員:

(1)指標成員採取常規行為。這樣的類具有指標的所有缺陷:具有指標成員且使用預設複製建構函式和賦值操作符,無法避免懸垂指標(兩個物件的指標成員指向同一記憶體,刪除了其中乙個指標指向的記憶體時,另乙個指標將不再指向有效的記憶體空間)。

(2)類可以實現所謂的"智慧型指標"行為。引入計數類,智慧型指標類將乙個計數器與類的物件相關聯。使用計數跟蹤該類有多少個物件共享同一指標。當計數為0時,刪除物件。

(3)類採取值行為。採用過載的複製建構函式、賦值操作符和析構函式。

2、指標成員採取常規行為示例:兩個指標指向同一塊記憶體,會引起不可預料的後果

#include "stdafx.h"  

#include <

string.h

>

#include <

iostream.h

>

class hasptr  

int *get_ptr()const  

int get_val()const  

void set_ptr(int *p)  

void set_val(int i)  

int get_ptr_val()const  

void set_ptr_val(int val)const  

private:  

int *ptr;  

int val;  

};  

int main(int argc, char* argv)    

3、"智慧型指標"行為示例:注意建構函式

#include "stdafx.h"  

#include <

string.h

>

#include <

iostream.h

>

class hasptr;  

//計數類u_ptr所有成員均為private,將hasptr設定為計數類的友元類,使其可以訪問u_ptr的成員  

class u_ptr  

~u_ptr()  

};  

class hasptr  

//建構函式,建立新的u_ptr物件  

hasptr(const hasptr &orig):ptr(orig.ptr),val(orig.val) //複製建構函式,計數加1  

hasptr& operator

=(const hasptr &rhs)  //賦值操作符,左運算元計數減1,右運算元計數加1,如果左運算元減至0,則刪除左運算元指向的物件  

return *this;  

}  ~hasptr() //析構函式,計數減1,如果計數減至0,就刪除物件  

}  int *get_ptr()const  

int get_val()const  

void set_ptr(int *p)  

void set_val(int i)  

int get_ptr_val()const  

void set_ptr_val(int val)  

private:  

u_ptr *ptr;  

int val;  

};  

int main(int argc, char* argv)    

4、定義值型類:三法則(賦值操作符、複製建構函式、析構函式)

#include 

<

string.h

>

#include <

iostream.h

>

class hasptr  

//建構函式  

hasptr(const hasptr &orig):ptr(new int(*orig.ptr)),val(orig.val){} //複製建構函式  

hasptr& operator

=(const hasptr &rhs)  //賦值操作符  

return *this;  

}  ~hasptr()  //析構函式  

int *get_ptr()const  

int get_val()const  

void set_ptr(int *p)  

void set_val(int i)  

int get_ptr_val()const  

void set_ptr_val(int val)const  

private:  

int *ptr;  

int val;  

};  

int main(int argc, char* argv)  

c 類管理指標成員

c 程式設計提倡使用標準庫,乙個原因是標準庫大膽減少對指標的使用。但是許多程式是離不開指標的。包含指標的類需要特別注意複製控制,原因是複製指標時只複製指標中的位址,而不複製指標所指向的物件。這樣當把乙個物件複製給另乙個物件後,當改變乙個物件後,另乙個物件也會收到牽連。另外乙個物件釋放掉後,其指標已經...

管理指標成員

void test bhasptr class ahasptr int get ptr const int get int const void set ptr int p void set int int i int get ptr val const void set ptr val int v...

管理指標成員

include include plain ptr.h include value ptr.h include smart ptr.h using namespace std void test ahasptr void test chasptr void test bhasptr int main...