vs2005 移植的問題(智慧型指標臨時物件)

2021-04-21 02:44:30 字數 1757 閱讀 8526

以下只是記錄一下我將工程從evc+wince5.0 移植到vs2005+wince6.0上的一點解惑。

template class auto_ptr

auto_ptr(auto_ptr& a) : m_ptr(a.release()) {}

auto_ptr& operator=(auto_ptr& a)

return *this;

}auto_ptr& operator=(t *p)

return *this;

}~auto_ptr()

t& operator*() const

t* operator->() const

operator t*() //add

operator const t*() const //add

t* get() const

t* release()

void reset(t* p = 0)

};這是個智慧型指標類auto_ptr,但這個智慧型指標所建立的臨時指標物件作為乙個函式的引數,分別在evc和vs2005

編譯執行產生了不同的行為。

例如:rfile * fp = new rfile();

m_fp=new cbuffile(auto_ptr(fp));

這個cbuffile的建構函式:

cbuffile::cbuffile(auto_ptrfile) :

m_fp(file),

m_ptr(0)

1.evc編譯 在wince5.0上執行

auto_ptr(fp)是乙個臨時建立的物件a,

在cbufile的建構函式裡執行auto_ptr的拷貝建構函式,

auto_ptr& operator=(auto_ptr& a)

從而將a的指標傳遞給拷貝者m_fp,a自己release符合使用auto_ptr的原則

(使用auto_ptr的乙個重要原則:乙個原生指標只能被auto_ptr物件封裝一次,不然可能就會產生「野指標」出現violate access)

2.  vs2005 +wince 6.0

auto_ptr(fp)是乙個臨時建立的物件.在cbufie的建構函式裡也執行一次拷貝構造,但是被拷貝者不是a,而是取出的

a所封裝的指標所構造出的物件b,而b的指標確實以拷貝構造的方式將自己的指標傳遞給了cbufile裡的m_fp,但這裡缺

違反了上述原則,沒有把a release,留下了產生野指標的後患。因為 a與cbufile裡的m_fp 封裝了相同的指標,其中乙個的

生存期完後,就到導致另乙個在被使用時產生violate access.

所以使用auto_ptr建立乙個智慧型指標臨時物件作為函式引數是乙個很危險的事(用上述的auto_ptr)..

總結如下:

1.vs2005--- 智慧型指標構造的臨時物件,不能作為引數使用(使用要小心)

2.開啟檔案失敗,而檔案控制代碼不為空,,說明此時控制代碼已經被closehandle了,不再是有效的控制代碼.

3.no source load for dll,,...dll除錯中,沒有可以執行的**了,會出現以上的說明。

4.nrefs > 1..出現以上的錯誤提示,說明了控制代碼沒有關閉,導致核心物件引用計數》1..

5.vs2005 除錯中,,執行到某一行**就不能往下繼續執行了,下面行的**沒有被執行,,

說明這一行**出現了問題(但是偵錯程式可能沒有給出提示),一般的原因是非法訪問,如訪問乙個

空指標物件的成員(即指標本身為空,卻呼叫其成員函式,出現voliate access)

VS2005建立智慧型裝置DLL

1 檔案 新建 其他語言 visual c 智慧型裝置 win32智慧型裝置專案 2 輸入名稱dll 3 平台 選中要支援的智慧型裝置sdk,這裡選擇wm5 wm6 4 應用程式型別 選擇dll專案 5 新建.h和.cpp檔案 如下 h ifndef dll test h define dll te...

vs2005斷點失效的問題,

不知道從什麼時候開始,vs2005 不能設定斷點了,啟動除錯的時候,連停止,和重啟除錯選單都沒有,這個折磨我好久了,vs2005有的時候可以設定斷點,有時候又不能用,寫 的時候真的是折騰人,在網上搜尋了下,基本上都是一樣的,要麼就是源 不一樣,還有設定專案屬性c 什麼的,我的專案屬性都找不到c 的,...

安裝vs2005遇到的問題

以前使用的vs2003,在接觸vs2005後,馬上就喜歡上了它,雖然是個英文版的,我也想著去用。我常用的工作電腦乙個是家裡的,乙個是單位的。家裡的電腦是xp sp2,單位的電腦是win2003 sp1,在單位的電腦上安裝,一路通行,順利而過。只是由於我在單位的電腦是乙個伺服器,慢的要死,在辦公室裡的...