青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

被無視的伊謝爾倫

雕欄玉砌應猶在,只是朱顏改

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  9 隨筆 :: 0 文章 :: 6 評論 :: 0 Trackbacks

例如有以下class:

class ?StringBad
{
????
private :
????????
char ? * ?str;
????????
int ?len;
?????????
????
public :
????????StringBad(
const ? char ? * ?s);
????????StringBad();
????????
~ StringBad();
????????
}
;

在構造函數和析構函數定義當中有如下定義:

StringBad::StringBad( const ? char ? * ?s)
{
????len?
= ?std::strlen(s);
????str?
= ? new ? char ?[len? + ? 1 ];
????
}
?

StringBad::StringBad()
{
????len?
= ? 4 ?;
????str?
= ? new ? char [ 4 ];
????
}
?

StringBad::
~ StringBad()
{
????
????delete?[]?str;
}

那么在程序當中如果有以下代碼:

StringBad?sports( " Spinach?Leaves?Bow1?for?bollars " );
StringBad?sailor?
= ?sports;

以上的第二條初始化語句將會調用什么構造函數?記住,這種形式的初始化等效于下面的語句:

StringBad?sailor? = ?StringBad(sports);

因為sports的類型為StringBad,因此相應的構造函數原型應該如下:

StringBad( const ?StringBad? & );

當我們使用一個對象來初始化另一個對象時,編譯器將自動生成上述構造函數(稱為復制構造函數,因為它創建對象的一個副本)。
現在我們不妨總結一下所謂的隱式成員函數,即C++自動提供了以下這些成員函數:

  • 默認構造函數,如果沒有定義構造函數。
  • 復制構造函數,如果沒有定義。
  • 賦值操作符,如果沒有定義。
  • 默認析構函數,如果沒有定義。
  • 地址操作符,如果沒有定義。

現在我們來看看我們沒有定義復制構造函數的情況下調用隱式復制構造函數將會出現什么情況。
從構造函數定義的代碼片斷可以看到,當中使用new操作符初始化了一個指針str,而隱式的復制構造函數是按值進行復制的,那么對于指針str,將會進行如下復制:

sailor.str? = ?sports.str;

這里復制的不是字符串,而是一個指向字符串的指針!也就是說,我們將得到兩個指向同一個字符串的指針!由此會產生的問題將不言而喻。當其中一個對象調用了析構函數之后,其str指向的內存將被釋放,這個時候我們如果調用另一個對象,其str指向的地址數據會是什么?很明顯將會出現不可預料的結果。

所以由此可見,如果類中包含了使用new初始化的指針成員,應當定義一個復制構造函數,以復制指向的數據,而不是指針,這被稱為深度復制。因為默認的淺復制(或成為成員復制)僅淺淺的賦值指針信息。

我們再看以下代碼片斷,我們稍做修改:

StringBad?headline1( " Celery?Stalks?at?Midnight " );
StringBad?knot;
knot?
= ?headline1;

這里的最后一行將與以上例子有所區別,現在是將已有對象賦給另一個已有對象,這將會采取其他操作,即使用重載的賦值操作符。(我們需要知道的是:初始化總是會調用復制構造函數,而使用=操作符時也可能調用賦值操作符)因為C++允許對象賦值,這是通過自動為類重載賦值操作符實現的。其原型如下:

Class_name? & ?Class_name:: operator ? = ?( const ?Class_name? & );

它接受并返回一個指向類對象的引用。
與隱式的復制構造函數一樣,隱式的對象賦值操作符也會產生同樣的問題,即包含了使用new初始化的指針成員時,只會采用淺復制。所以我們需要使用同樣的解決辦法,即定義一個重載的賦值操作符來實現深度復制。

所以綜上所述,如果類中包含了使用new初始化的指針成員,我們應該顯式定義一個復制構造函數和一個重載的賦值操作符來實現其深度復制,避免由此帶來的成員復制問題

參考書籍:C++PrimerPlus author:Stephen Prata

posted on 2006-09-28 14:33 愛上青菜的包子 閱讀(1602) 評論(0)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩一级不卡| 午夜亚洲视频| 欧美v亚洲v综合ⅴ国产v| 久久久久久久久蜜桃| 国产在线日韩| 欧美高清不卡| 欧美日韩精品高清| 亚洲综合色网站| 亚洲一区日韩在线| 国产一区二区福利| 亚洲第一黄色网| 欧美日韩国产综合视频在线观看| 亚洲三级电影全部在线观看高清| 亚洲人成网站999久久久综合| 欧美激情中文字幕乱码免费| 亚洲一区二区三区四区在线观看 | 91久久精品久久国产性色也91| 欧美aⅴ99久久黑人专区| 99精品视频一区| 亚洲欧美另类综合偷拍| 合欧美一区二区三区| 欧美激情一区二区三级高清视频| 欧美视频在线观看免费网址| 久久精品欧美日韩精品| 欧美成人一区二区在线| 亚洲欧美视频一区二区三区| 久久亚洲国产成人| 亚洲影视九九影院在线观看| 久久精品伊人| 亚洲一区二区三区精品在线| 久久久精品网| 亚洲综合第一| 欧美/亚洲一区| 欧美在线免费| 欧美精品三区| 欧美xxx在线观看| 国产精品男人爽免费视频1| 能在线观看的日韩av| 国产精品青草久久| 亚洲国产成人精品女人久久久| 国产精品一区二区欧美| 亚洲人成毛片在线播放| 激情综合自拍| 亚洲欧美国产精品专区久久| 亚洲免费电影在线观看| 久久九九热免费视频| 午夜精品亚洲一区二区三区嫩草| 噜噜噜在线观看免费视频日韩| 久久精品视频免费观看| 欧美日本中文字幕| 欧美激情综合| 红桃视频成人| 欧美在线免费视屏| 亚洲免费在线观看| 欧美日韩国产精品自在自线| 欧美激情视频网站| 在线看片第一页欧美| 久久国产日韩| 久久久国产精品一区二区三区| 国产精品久久久久久久久免费樱桃 | 日韩视频―中文字幕| 国模大胆一区二区三区| 香蕉久久国产| 欧美一区二区三区在线播放| 国产精品毛片在线| 亚洲视频中文| 亚洲欧美日韩一区在线| 欧美日韩一区二区三| 99精品视频免费全部在线| 一区二区三区四区在线| 欧美三级视频在线播放| 一区二区三区精密机械公司 | 国产日韩欧美麻豆| 欧美在线视频二区| 久久精品夜色噜噜亚洲aⅴ| 国产视频在线观看一区| 久久gogo国模裸体人体| 免费成人美女女| 亚洲三级视频| 欧美日韩在线免费视频| 亚洲欧美日韩精品在线| 久久久999精品免费| 亚洲国产另类精品专区| 免费人成精品欧美精品| 亚洲黄色有码视频| 亚洲一卡久久| 国产一区二区三区高清在线观看| 欧美在线视频在线播放完整版免费观看 | 久久久噜噜噜| 亚洲黄网站在线观看| 欧美日韩精品免费观看| 亚洲欧美日韩高清| 老司机免费视频久久| 亚洲日本va午夜在线电影| 欧美日韩一区二区三区| 亚久久调教视频| 亚洲高清123| 欧美影片第一页| 亚洲精品欧洲| 国产精品一区二区黑丝| 免费看亚洲片| 亚洲已满18点击进入久久 | 99国产精品视频免费观看一公开| 国产精品高潮呻吟| 久久久精品午夜少妇| 99精品视频免费全部在线| 久久视频在线免费观看| 99热精品在线| 精品成人国产| 国产精品无人区| 免费成人小视频| 亚洲综合色自拍一区| 欧美激情在线播放| 性色一区二区三区| 亚洲免费播放| 狠狠做深爱婷婷久久综合一区 | 欧美专区中文字幕| 亚洲每日更新| 欧美成人激情视频免费观看| 亚洲一区二区在线免费观看| 亚洲国产精品传媒在线观看| 国产精品香蕉在线观看| 欧美日韩精品免费在线观看视频| 久久视频在线免费观看| 亚洲欧美日韩综合aⅴ视频| 亚洲精品影视在线观看| 欧美国产日韩精品免费观看| 久久琪琪电影院| 欧美专区在线播放| 午夜久久久久久| 中文国产成人精品| 一区二区三区久久网| 91久久国产综合久久| 激情综合激情| 国产一区视频网站| 国产欧美一级| 国产日韩精品电影| 国产精品无码永久免费888| 欧美先锋影音| 欧美日韩在线不卡| 欧美涩涩视频| 欧美四级在线| 国产精品久久久久久久午夜| 欧美视频一区在线观看| 欧美日韩亚洲三区| 欧美日韩四区| 国产精品videosex极品| 欧美日韩一区高清| 国产精品久久久久久久久| 欧美日韩精品一区二区在线播放| 欧美精品亚洲精品| 欧美亚洲成人免费| 国产精品日韩在线一区| 国产日韩欧美在线观看| 国产午夜久久| 黄色国产精品一区二区三区| 在线观看日韩一区| 亚洲人成7777| 亚洲在线成人| 久久久成人网| 欧美激情性爽国产精品17p| 亚洲精品一二三| 亚洲一区二区在线视频| 欧美一区三区三区高中清蜜桃| 久久免费视频网| 欧美日韩国产综合视频在线观看中文 | 亚洲影视九九影院在线观看| 香蕉精品999视频一区二区 | 亚洲国产片色| 在线亚洲欧美专区二区| 欧美一区二区三区免费在线看| 久久精品中文| 亚洲国产日韩欧美综合久久 | 久久精品成人一区二区三区| 麻豆av一区二区三区| 亚洲日本中文字幕| 亚洲欧美中文在线视频| 久久综合综合久久综合| 欧美午夜片在线观看| 国产亚洲欧洲| 99热精品在线观看| 久久精品亚洲| 亚洲区在线播放| 午夜一区在线| 欧美人与禽猛交乱配| 国产视频一区在线观看| 99精品免费| 久久女同精品一区二区| 亚洲最新在线视频| 久久久亚洲国产天美传媒修理工| 欧美天天影院| 亚洲精品一区二区三区av| 欧美一区二区三区四区在线| 亚洲三级视频在线观看| 欧美中文字幕不卡| 欧美性片在线观看| 亚洲精品一级| 欧美 日韩 国产在线| 香蕉成人久久| 国产精品成人一区二区三区吃奶|