一步一步重構柔性陣列和智慧型指標

2021-08-20 05:05:00 字數 2367 閱讀 8098

在c/c++實際工程開發中記憶體操作,稍不留神就會出現千奇百怪的各種bug,導致整個專案組花很大的時間使用各種工具定位錯誤,解決記憶體操作問題!

1、防止陣列越界操作,使用柔性陣列;

2、記憶體洩露和多次釋放,使用智慧型指標;

當然你會說還需要注意使用malloc申請了記憶體後,應該立即檢查指標值是否為null,防止使用值為null的指標;動態申請操作必須和釋放操作匹配;free指標之後必須立即賦值為null,防止野指標等等。有些是習慣問題,如果你注意到了,這都不是問題!

柔性陣列是陣列大小待定的陣列,通過結構體將成員的結構用malloc ()函式進行記憶體的動態分配,並且分配的記憶體應該大於結構的大小,以適應柔性陣列的預期大小,防止陣列越界的問題。

c語言實現:

c++實現:

在編寫大型程式的時候,有時我們忘記delete分配的記憶體,或者多次釋放分配的記憶體,這樣會造成記憶體洩露和程式的down機。在程式開發中,預先編寫智慧型指標類代替原生的指標。出現問題後直接返回錯誤。

通過類模板實現的步驟:

(1)建構函式接管記憶體的申請;

(2)析構函式確保記憶體被及時釋放;

(3)過載指標運算子*和->模擬指標的行為;

(4)過載比較運算子== 和 != 模擬指標的比較。

//功能:智慧型指標

#include #include #include #include "smartpointer.hpp"

using namespace std;

class test

;#endif

//智慧型指標 類成員函式定義 標頭檔案 smartpoint.hpp

#ifndef _smartpointer_def_h_

#define _smartpointer_def_h_

#include "smartpointer.h"

templatesmartpointer::smartpointer()

templatesmartpointer::smartpointer(const t* pointer)

templatesmartpointer::~smartpointer()

templatet* smartpointer::operator->()

templatet& smartpointer::operator*()

templatebool smartpointer::operator==(const smartpointer& operater)

templatebool smartpointer::operator!=(const smartpointer& operater)

#endif

一步一步 Sql Azure

一步一步 sql azure 1.使用 windowsazure 平台賬號登陸 2.新建sqlazure server 3.新建資料庫 4.為sql azure server 新增防火牆規則,只有將本機新增到規則裡才能從本機連線到該sqlazure server 5.連線到sql azure ser...

一步一步學Ruby 十八 陣列

一 陣列定義和基本操作1.陣列的定義和其它語言一樣,ruby裡的陣列並不限定型別.x 1,2,3,4 puts x 2 輸出3 x 2 1 puts x 2 輸出 4 x 2 jack 3 輸出 jackjackjack2.陣列可以不設初始值,可以使用 和pop的操作,後進先出x x jack x ...

一步一步學Ruby 十八 陣列

一 陣列定義和基本操作1.陣列的定義和其它語言一樣,ruby裡的陣列並不限定型別.x 1,2,3,4 puts x 2 輸出3 x 2 1 puts x 2 輸出 4 x 2 jack 3 輸出 jackjackjack2.陣列可以不設初始值,可以使用 和pop的操作,後進先出x x jack x ...