代碼如下:
PS:for回圈中不允許進行vpData2的處理的情況下,如何使得vpData2的元素自動也變成NULL?
class SNew
{
public:
SNew()
{
m_nValue = 1;
}
virtual ~SNew()
{
}
int m_nValue;
};
int _tmain(int argc, _TCHAR* argv[])
{
SNew *pValue = new SNew();
vector<SNew*> vpData;
vpData.push_back(pValue);
vector<SNew*> vpData2;
for (int i=0; i<vpData.size(); i++)
{
vpData2.push_back(vpData.at(i));
}
for ( vector<SNew *>::iterator it=vpData.begin(); it !=vpData.end();)
{
SNew *pTmp = *it;
delete pTmp;
pTmp = NULL;
it=vpData.erase(it);
}
SNew *pTmp2 = vpData2.at(0); //該指標為0xfeeefeee野指標,如何設計讓其為NULL?
return 0;
}
uj5u.com熱心網友回復:
在vpData洗掉的時候 vpData2 中也洗掉uj5u.com熱心網友回復:
vpData洗掉和vpData2取值不是在一個函式里,這里是舉個例子,如何在vpData洗掉之后,vpData2獲取的指標成員自動也是空?因它指的地址已經釋放并且賦值為nulluj5u.com熱心網友回復:
這個沒辦法,需要操作其他容器,修改元素也賦值為NULLuj5u.com熱心網友回復:
需要額外去操作vpData2~uj5u.com熱心網友回復:
用一個容器存盤, 其它地方都以這個容器的指標去訪問uj5u.com熱心網友回復:
for ( vector<SNew *>::iterator it=vpData.begin(); it !=vpData.end();)
{
SNew *pTmp = *it;
delete pTmp;
pTmp = NULL; //這句話,并不是 把vpData容器里面的指標設為NULL,而是把pTmp指向NULL,當你delete pTmp 時候vpData容器內部的指標就是0xfeeefeee
it=vpData.erase(it);
}
uj5u.com熱心網友回復:
普通的指標無法做到你說的.只能自己封裝, 或者使用現成的智能指標.
當某個指標沒有參考計數后, 自動釋放記憶體.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/73831.html
標籤:基礎類
上一篇:windows程式設計滾動條訊息中的messagebox無限彈出
下一篇:視差圖分割后的物體檢測
