最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++編程小心指針被delete兩次

 更新時(shí)間:2014年07月15日 11:04:03   投稿:shichen2014  
這篇文章主要介紹了C++編程指針被delete兩次的嚴(yán)重后果,以實(shí)例闡述了C++指針使用中的誤區(qū)和注意點(diǎn),需要的朋友可以參考下

在C++類中,有時(shí)候會(huì)使用到傳值調(diào)用(即使用對(duì)象實(shí)體做參數(shù)),當(dāng)遇到這種情況,可要小心了!尤其是當(dāng)你所傳值的對(duì)象生命周期較長,而非臨時(shí)對(duì)象(生命周期段)的時(shí)候。來看看下面的情況:

#include <iostream>
using namespace std;
class Text
{
private:
char * str;
public:
Text(){str = new char[20];
::memset(str,0,20);
}
void SetText(char * str)
{
strcpy(this->str,str);
}
char * GetText() const{return str;}
~Text()
{
cout << "~Text Destruction" << endl;
delete [] str;
cout << "~Text Over" << endl;
}
};
void Print(Text str)
{
cout << str.GetText() << endl;
}
int main()
{
Text t;
t.SetText("abc");
Print(t);
return 1;
}

上面執(zhí)行的結(jié)果是程序崩潰了。原因是:

Print(Text str)在對(duì)str進(jìn)行復(fù)制構(gòu)造的時(shí)候,沒有進(jìn)行深度拷貝;當(dāng) Print退出的時(shí)候,因?yàn)槭桥R時(shí)對(duì)象(函數(shù)初始時(shí)構(gòu)造),對(duì)str進(jìn)行析構(gòu),此時(shí)還沒有出現(xiàn)任何問題;但回到main,繼而退出main 的時(shí)候,又對(duì)t進(jìn)行析構(gòu),但此時(shí)t內(nèi)的str中的內(nèi)容已經(jīng)被銷毀。由于對(duì)一內(nèi)存空間實(shí)施了兩次銷毀,于是就出現(xiàn)了內(nèi)存出錯(cuò)。

解決方法如下:

重寫前拷貝。像以下版本,不同的情況要作出適當(dāng)?shù)恼{(diào)整:

#include <iostream>
using namespace std;
class Text
{
private:
char * str;
public:
Text(){str = new char[20];::memset(str,0,20);}
Text(Text &t)
{
str = new char[20];
strcpy(str,t.GetText());
}
void SetText(char * str)
{
strcpy(this->str,str);
}
char * GetText() const{return str;}
~Text()
{
cout << "~Text Destruction" << endl;
delete [] str;
cout << "~Text Over" << endl;
}
};
void Print(Text str)
{
cout << str.GetText() << endl;
}
int main()
{
Text t;
t.SetText("abc");
Print(t);
return 1;
}

此處推薦不使用傳值調(diào)用。就像下面書寫如下Print版本:

void Print(Text &str)
{
cout << str.GetText() << endl;
}

除非對(duì)象內(nèi)所有的成員讀屬非指針內(nèi)存內(nèi)容,那么謹(jǐn)慎使用文章前面提到的用法。

相關(guān)文章

  • C語言中數(shù)據(jù)如何存儲(chǔ)進(jìn)內(nèi)存揭秘

    C語言中數(shù)據(jù)如何存儲(chǔ)進(jìn)內(nèi)存揭秘

    使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-08-08
  • C語言實(shí)現(xiàn)簡單通訊錄

    C語言實(shí)現(xiàn)簡單通訊錄

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡易通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Qt實(shí)現(xiàn)高精度定時(shí)器

    Qt實(shí)現(xiàn)高精度定時(shí)器

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)高精度定時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++小知識(shí):復(fù)制粘貼代碼千萬要小心

    C++小知識(shí):復(fù)制粘貼代碼千萬要小心

    今天小編就為大家分享一篇關(guān)于C++小知識(shí):復(fù)制粘貼代碼千萬要小心,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C語言實(shí)現(xiàn)設(shè)備管理系統(tǒng)

    C語言實(shí)現(xiàn)設(shè)備管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)設(shè)備管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++中關(guān)于Crt的內(nèi)存泄漏檢測的分析介紹

    C++中關(guān)于Crt的內(nèi)存泄漏檢測的分析介紹

    本篇文章介紹了,在C++中關(guān)于Crt的內(nèi)存泄漏檢測的分析說明。需要的朋友參考下
    2013-04-04
  • 淺析C++可變參數(shù)模板的展開方式

    淺析C++可變參數(shù)模板的展開方式

    可變參數(shù)模板(variadic templates)是C++11新增的強(qiáng)大的特性之一,它對(duì)模板參數(shù)進(jìn)行了高度泛化,能表示0到任意個(gè)數(shù)、任意類型的參數(shù),這篇文章主要介紹了C++可變參數(shù)模板的展開方式,需要的朋友可以參考下
    2022-04-04
  • C++如何獲取本機(jī)的IP地址

    C++如何獲取本機(jī)的IP地址

    這篇文章主要為大家詳細(xì)介紹了C++如何獲取本機(jī)IP地址小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++ vector在多線程操作中出現(xiàn)內(nèi)存錯(cuò)誤問題及解決

    C++ vector在多線程操作中出現(xiàn)內(nèi)存錯(cuò)誤問題及解決

    這篇文章主要介紹了C++ vector在多線程操作中出現(xiàn)內(nèi)存錯(cuò)誤問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 使用C++實(shí)現(xiàn)給PDF文檔添加文字水印

    使用C++實(shí)現(xiàn)給PDF文檔添加文字水印

    這篇文章主要為大家詳細(xì)介紹了如何通過第三方國產(chǎn)庫Spire.PDF?for?C++來實(shí)現(xiàn)給PDF文檔添加文字水印,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11

最新評(píng)論

开鲁县| 本溪| 泰顺县| 日土县| 中宁县| 巩义市| 太谷县| 英德市| 武陟县| 阿拉尔市| 丹巴县| 阳信县| 米脂县| 黑水县| 闽清县| 奇台县| 牡丹江市| 英德市| 清涧县| 镇沅| 梅河口市| 清远市| 盐亭县| 祁阳县| 赤水市| 镇赉县| 郓城县| 遂平县| 乌鲁木齐市| 昌宁县| 区。| 桃江县| 隆昌县| 府谷县| 当雄县| 嵊州市| 龙川县| 九江县| 马山县| 无为县| 宁国市|