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

brent's hut

C++拷貝構(gòu)造函數(shù)深入分析以及重寫operator =

?

class ?CTestCopyConstruct {
public :
????CTestCopyConstruct()
{
????????TRACE(
" Enter?CTestCopyConstruct();this?is?%d\n " , this );
????????strTest?
= ? " not?ok " ;
????????i?
= ? 0 ;
????}

????CTestCopyConstruct(
const ?CTestCopyConstruct? & src) {
????????TRACE(
" Enter?CTestCopyConstruct(const?CTestCopyConstruct?&src);this?is?%d;src?is?%d\n " , this , & src);
????????strTest?
= ?src.strTest;
????????i?
= ?src.i;
????}

????CTestCopyConstruct?
& ?operator? = ( const ?CTestCopyConstruct? & ?src) {
????????TRACE(
" Enter?CTestCopyConstruct?&?operator?=(const?CTestCopyConstruct?&?src);this?is?%d;src?is?%d\n " , this , & src);
????????strTest?
= ?src.strTest;
????????i?
= ?src.i;
????????
return ? * this ;
????}

????CString?strTest;
????
int ?i;
}
;

CTestCopyConstruct?GetTest()
{
????CTestCopyConstruct?ret1;
????ret1.strTest?
= ? " ok " ;
????ret1.i?
= ? 0 ;
????CTestCopyConstruct?ret2;

????
return ?ret1;
}


void ?CTestDlg::OnOK()?
{
????CTestCopyConstruct?var1;
????CTestCopyConstruct?var2?
= ?GetTest();

????TRACE(
" \nresult?1:\n " );
????TRACE(
" var1?is?%d\n " , & var1);
????TRACE(
" var2?is?%d?var2.str?is?%s\n\n " , & var2,var2.strTest);

????CTestCopyConstruct?var3?
= ?var2;
????CTestCopyConstruct?var4;
????var4?
= ?var2;

????TRACE(
" \nresult?2:\n " );
????TRACE(
" var3?is?%d?var3.str?is?%s\n " , & var3,var3.strTest);
????TRACE(
" var4?is?%d?var2.str?is?%s\n " , & var4,var4.strTest);
}



代碼如上,調(diào)試窗口輸出如下:
Enter CTestCopyConstruct();this is 1242980
Enter CTestCopyConstruct();this is 1242848
Enter CTestCopyConstruct();this is 1242840
Enter CTestCopyConstruct(const CTestCopyConstruct &src);this is 1242972;src is 1242848

result 1:
var1 is 1242980
var2 is 1242972 var2.str is ok

Enter CTestCopyConstruct(const CTestCopyConstruct &src);this is 1242964;src is 1242972
Enter CTestCopyConstruct();this is 1242956
Enter CTestCopyConstruct & operator =(const CTestCopyConstruct & src);this is 1242956;src is 1242972

result 2:
var3 is 1242964 var3.str is ok
var4 is 1242956 var2.str is ok

分析:
CTestCopyConstruct var1;\\1
CTestCopyConstruct var2 = GetTest();\\2
代碼的執(zhí)行如下:
當(dāng)前堆棧指針(sp) = 1242980
sp -= 8//在堆棧中為var1分配空間
在var1上(1242980 - 1242973)調(diào)用構(gòu)造函數(shù)
sp -= 8//在堆棧中為var2分配空間
sp -= n//保護(hù)當(dāng)前環(huán)境
進(jìn)入了GetTest函數(shù)
當(dāng)前sp = 1242848
sp -= 8//為ret1分配空間
構(gòu)建ret1
sp -= 8//為ret2分配空間
構(gòu)建ret2
......
對(duì)var2(1242972處的堆棧段)調(diào)用拷貝構(gòu)造函數(shù),以test1(1242848處)為參數(shù)
//析構(gòu)test1 test2等...
sp += n//恢復(fù)運(yùn)行環(huán)境
......

另:
operater = () 和默認(rèn)構(gòu)造函數(shù)不一樣,只重寫=運(yùn)算符而不提供拷貝構(gòu)造函數(shù),調(diào)用的仍然是默認(rèn)的構(gòu)造函數(shù)。
默認(rèn)構(gòu)造函數(shù)和賦值運(yùn)算符處理的情況不一樣,一個(gè)是在已分配的空間上調(diào)用,一個(gè)是在已構(gòu)造的對(duì)象上調(diào)用。

默認(rèn)拷貝構(gòu)造函數(shù)會(huì)調(diào)用類中各成員的拷貝構(gòu)造函數(shù)。CString 由于提供了拷貝構(gòu)造函數(shù),所以上面例子中即使去掉拷貝構(gòu)造函數(shù),var2 仍然會(huì)得到正確的值。

調(diào)試的環(huán)境是vc6.0 debug 默認(rèn)選項(xiàng)。編譯沒有優(yōu)化。

CTestCopyConstruct( const ?CTestCopyConstruct? & src)
????????
{
????????TRACE(
" Enter?CTestCopyConstruct(const?CTestCopyConstruct?&src);this?is?%d;src?is?%d\n " , this , & src);
????????strTest?
= ?src.strTest;
????????i?
= ?src.i;
????}




CTestCopyConstruct(
const ?CTestCopyConstruct? & src)
????????:strTest?(src.strTest)
{
????????TRACE(
" Enter?CTestCopyConstruct(const?CTestCopyConstruct?&src);this?is?%d;src?is?%d\n " , this , & src);
????????i?
= ?src.i;
????}

前者先調(diào)用了CString::CString()再調(diào)用CString::operator =
后者直接調(diào)用了CString::CString(CString & src);


默認(rèn)的賦值運(yùn)算的行為:首先調(diào)用父類的賦值運(yùn)算。
然后會(huì)為自己獨(dú)有的各成員尋找賦值運(yùn)算。如果成員的賦值運(yùn)算符被重寫,則調(diào)用這個(gè)重寫的賦值運(yùn)算符函數(shù),如果這個(gè)重寫的運(yùn)算符函數(shù)是private,編譯將無(wú)法通過。
默認(rèn)的拷貝構(gòu)造函數(shù)的行為:首先調(diào)用父類的拷貝構(gòu)造函數(shù)。
然后為自己獨(dú)有的各成員尋找拷貝構(gòu)造函數(shù)。如果這個(gè)成員提供拷貝構(gòu)造函數(shù),則調(diào)用之,如果成員的類提供的拷貝構(gòu)造函數(shù)是private,編譯將無(wú)法通過。
(子類完全可以把父類當(dāng)成自己的一個(gè)成員?)


可以說(shuō)默認(rèn)的賦值運(yùn)算和默認(rèn)的拷貝構(gòu)造函數(shù)是類最常被用到的兩個(gè)函數(shù)了...內(nèi)部卻不是一般的復(fù)雜。

posted on 2006-03-30 10:34 brent 閱讀(1597) 評(píng)論(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>
            亚洲精品之草原avav久久| 日韩亚洲不卡在线| 欧美国产一区视频在线观看| 亚洲午夜影视影院在线观看| 亚洲青涩在线| 欧美大色视频| 久久免费国产| 欧美成人在线免费观看| 最新热久久免费视频| 亚洲国产欧美日韩| 99一区二区| 校园激情久久| 免费在线欧美黄色| 欧美性片在线观看| 狠狠入ady亚洲精品经典电影| 在线电影国产精品| 一区二区欧美精品| 久久精品亚洲一区| 亚洲福利视频在线| 亚洲无线观看| 久久综合久久美利坚合众国| 国产日韩在线不卡| 国产午夜精品视频| 亚洲激情国产| 欧美伊人久久久久久久久影院 | 国产综合网站| 亚洲美女淫视频| 久久aⅴ国产紧身牛仔裤| 欧美大成色www永久网站婷| 一本色道婷婷久久欧美| 欧美中文在线视频| 欧美亚男人的天堂| 91久久久久久久久久久久久| 欧美一区二区三区视频| 亚洲国产人成综合网站| 欧美一区二区三区在线观看视频| 欧美日本高清视频| 亚洲精华国产欧美| 午夜影视日本亚洲欧洲精品| 欧美高潮视频| 久久精品在线免费观看| 国产精品成人一区二区艾草| 亚洲人成在线观看一区二区 | 夜夜躁日日躁狠狠久久88av| 久久久久国产精品www | 欧美日韩成人综合| 亚洲欧洲免费视频| 老司机精品导航| 亚洲男人的天堂在线观看| 欧美激情免费在线| 亚洲国产成人av| 久久精品国产第一区二区三区| 亚洲精品欧美专区| 久久久久成人精品| 日韩一二在线观看| 美女视频黄a大片欧美| 国产色综合天天综合网| 亚洲欧美综合另类中字| 亚洲国产精品传媒在线观看 | 欧美日韩美女一区二区| 精品福利免费观看| 久久亚洲一区| 久久成人资源| 国产字幕视频一区二区| 久久久久国内| 久久精品国产2020观看福利| 国产一区二区三区久久悠悠色av| 午夜在线观看免费一区| 亚洲女人av| 国内精品久久久久久久影视麻豆| 久久精品国产99精品国产亚洲性色| 亚洲欧美日韩精品久久久| 国产精品一区二区三区成人| 午夜久久久久久| 亚洲视频福利| 国产亚洲欧美一区在线观看| 久久精品成人| 久久午夜精品| 在线视频精品一区| 亚洲欧美日韩成人| 国产午夜精品一区二区三区视频 | 亚洲欧洲在线视频| 亚洲狼人综合| 国产欧美日韩视频在线观看 | 蜜桃视频一区| 亚洲网友自拍| 亚洲欧美日韩电影| 激情成人综合| 99国产一区| 国产偷久久久精品专区| 亚洲第一中文字幕在线观看| 欧美日韩三级在线| 久久婷婷丁香| 欧美日韩在线另类| 久久精品夜色噜噜亚洲a∨| 麻豆免费精品视频| 亚洲女女女同性video| 久久成人免费视频| 亚洲视频免费观看| 久久一区激情| 亚洲影视九九影院在线观看| 久久久www成人免费无遮挡大片| 一区二区三区高清视频在线观看| 午夜亚洲性色视频| 日韩一区二区高清| 久久久久久9| 亚洲免费视频中文字幕| 欧美成人中文字幕在线| 欧美在线综合视频| 欧美.www| 卡通动漫国产精品| 欧美日韩国产小视频在线观看| 久久国产主播精品| 欧美三日本三级少妇三2023 | 亚洲日韩欧美视频一区| 国产欧美视频一区二区| 亚洲伦理一区| 在线观看欧美黄色| 性久久久久久| 中文在线一区| 欧美激情第三页| 欧美a一区二区| 韩国一区电影| 久久精品99国产精品酒店日本| 亚洲欧美综合另类中字| 欧美日韩理论| 亚洲精选视频在线| 亚洲国产导航| 久久亚洲国产精品日日av夜夜| 久久精品国产久精国产一老狼| 国产精品理论片| 亚洲自拍偷拍麻豆| 久久不射中文字幕| 国产亚洲免费的视频看| 亚洲砖区区免费| 久久国产主播| 韩国免费一区| 久久婷婷国产综合国色天香| 免费在线日韩av| 亚洲精品国产精品国自产观看浪潮 | 久久久一区二区| 红桃视频欧美| 久久夜色撩人精品| 亚洲国产精品久久久| 亚洲精品在线二区| 欧美精品三级| 在线中文字幕不卡| 欧美在线一二三四区| 韩日成人在线| 欧美成人午夜剧场免费观看| 91久久夜色精品国产九色| 在线视频你懂得一区| 国产精品久久久久久久久久免费看| 一区二区三区日韩在线观看| 性欧美1819sex性高清| 国产日韩欧美视频| 久久这里有精品15一区二区三区 | 99综合精品| 国产精品亚洲精品| 欧美专区在线观看| 亚洲福利av| 午夜激情综合网| 亚洲电影在线播放| 欧美日韩在线观看一区二区三区| 午夜精彩视频在线观看不卡 | 欧美自拍偷拍| 亚洲福利视频三区| 亚洲欧美日韩在线观看a三区| 国产在线观看精品一区二区三区 | 日韩亚洲欧美高清| 亚洲欧美日韩爽爽影院| 黑人巨大精品欧美一区二区小视频| 噜噜噜躁狠狠躁狠狠精品视频| 99av国产精品欲麻豆| 久久青青草综合| 99一区二区| 狠狠色狠狠色综合日日小说| 欧美日韩成人在线播放| 欧美中文在线免费| 在线视频亚洲欧美| 欧美国产免费| 欧美影院在线| 一区二区三区免费在线观看| 韩国欧美一区| 国产精品日本一区二区| 你懂的视频一区二区| 午夜综合激情| 宅男噜噜噜66国产日韩在线观看| 麻豆成人综合网| 久久福利视频导航| 亚洲午夜激情在线| 亚洲精品一区二区三区蜜桃久| 国产偷国产偷亚洲高清97cao| 欧美日韩三区四区| 久久影视三级福利片| 欧美一级电影久久| 亚洲午夜精品福利| 99精品视频网| 欧美黄色大片网站| 久久久综合精品|