亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

# [Boolan] C++第五周 重載const,new,delete

2019-11-08 01:31:20
字體:
來源:轉載
供稿:網友

const 重載

const修飾類成員函數,該成員函數里面不可能修改成員變量其中const也算函數簽名的一部分, 只用于在類的成員函數const的重載使用條件:如果一個類聲明中有const重載的函數,const對象使用const修飾的成員函數,非const對象使用沒有const修飾的成員函數#include <iostream>using namespace std;class Foo{public: void PRint() const{ cout << "Foo::Print const" << endl; } void Print(){ cout << "Foo::Print" << endl; }};int main(int argc, char *argv[]){ const Foo fConst; fConst.Print(); Foo f; f.Print(); return 0;}

重載new delete

new ----> Operator new 分配空間 調用相應的構造函數delete ---- > 調用析構函數 operator delete#include <iostream>#include <string>using namespace std;class Foo{private: int _id; long _data; string _str;public: Foo():_id(0) { cout << "default ctor. this=" << this << " id="<<_id << endl; } Foo(int i): _id(i) { cout << "ctor.this=" << this << " id=" << _id << endl; } ~Foo() { cout << "dtor.this=" <<this << " id=" << _id <<endl; } static void *operator new(size_t size); static void operator delete(void* pdead, size_t size); static void *operator new[](size_t size); static void operator delete[] (void*pdead, size_t size);};void * Foo::operator new(size_t size){ cout << " Foo::operator new " << endl; Foo *p = (Foo*)malloc(size); return p;}void Foo::operator delete(void* pdead, size_t size){ cout << " Foo::operator delete " << endl; free(pdead);}void * Foo::operator new[](size_t size){ Foo* p = (Foo*)malloc(size); return p;}void Foo::operator delete[](void*pdead, size_t size){ free(pdead);}int main(int argc, char *argv[]){ Foo *pf = new Foo; delete pf; cout << "-----------------" <<endl; //強制調用全局的new/delete Foo *p = ::new Foo; ::delete p; return 0;}

重載new() delete()

我們可以重載類的成員函數operator new(), 寫出多個版本,前提是每個版本的聲明必須有獨特的參數列,其中第一個參數必須是size_t, 其余參數指定的placement arguments為初值 Foo* pf = new (300, 'c')Foo;我們也可以重載類的成員函數operator delete(),寫出多個版本,但是他們絕不會被delete調用。只有當new所調用的析構函數拋出exception,才會調用這些重載版的operator delete(). 它只可能這樣被調用,主要用來歸還未能完全創建成功的object所占的memory.并且重載版的delete是被系統自動調用的#include <iostream>#include <stdio.h>using namespace std;namespace test1{ class Foo { public: void Print() const{ cout << "Foo::Print const" << endl; } void Print(){ cout << "Foo::Print" << endl; } };};namespace test2 { class Bad{}; class Foo{ public: Foo() { cout << "Foo::Foo()" <<endl; } Foo(int) {cout << "Foo::Foo(int)" << endl; throw "拋出異常";} //(1) static void* operator new(size_t size) { return malloc(size); } static void operator delete(void* pdead, size_t size) { cout << "void operator delete(void* pdead, size_t size)" <<endl; free(pdead); } //(2) static void* operator new(size_t size, void *) { return malloc(size); } static void operator delete(void *, void *) { cout << "operator delete(void *, void *)" << endl; } //(3) static void* operator new(size_t size, long extra) { return malloc(size + extra); } static void operator delete(void *pHead, long) { cout << "operator delete(void *, long)" << endl; //free(pHead); } //(4) static void* operator new(size_t size, long extra, char init) { return malloc(size + extra); } static void operator delete(void *pHead, long, char) { cout << "operator delete(void *, long, char)" << endl; free(pHead); } };};int main(int argc, char *argv[]){ test2::Foo start; test2::Foo *p1; test2::Foo *p2; test2::Foo *p3 ; test2::Foo *p4; test2::Foo *p5 ; try { p1 = new test2::Foo; p2 = new (&start) test2::Foo; p3 = new (100)test2::Foo; p4 = new (100, 'a')test2::Foo; p5 = new (100)test2::Foo(1); } catch (const char* msg) { cout << msg<<endl; } return 0;}//////////////////////////////// 環境VC6.0Foo::Foo()Foo::Foo()Foo::Foo()Foo::Foo()Foo::Foo()Foo::Foo(int)operator delete(void *, long)拋出異常Press any key to continue引用場景:string中使用重載operator new()的方式,給一塊內存添加引用計數,可節省內存空間
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品视频免费在线观看| 日韩av快播网址| 777777777亚洲妇女| 久久99久久亚洲国产| 日韩欧美成人免费视频| 伊人一区二区三区久久精品| 91成人精品网站| 欧美视频在线免费| 欧美日韩国产在线播放| 国产精品久久久久久久app| 欧美精品成人91久久久久久久| 亚洲va国产va天堂va久久| 91老司机在线| 91亚洲精品一区| 中国日韩欧美久久久久久久久| 欧美激情成人在线视频| 国产精品在线看| 亚洲全黄一级网站| 国产精品99久久久久久白浆小说| 亚洲人成在线电影| 亚洲香蕉av在线一区二区三区| 日韩av影视综合网| 91久久精品国产| 亚洲第一网中文字幕| 亚洲国产精品成人精品| 国产精品综合网站| 不卡伊人av在线播放| 亚洲精品一区久久久久久| 日韩久久免费电影| 午夜精品免费视频| 日韩av电影免费观看高清| 国产99久久精品一区二区永久免费| 亚洲欧美国产高清va在线播| 日韩欧美a级成人黄色| 91精品久久久久久久久不口人| 久久综合伊人77777蜜臀| 国产精品久久久久久av下载红粉| 国产亚洲精品久久久优势| 久久久久久久久综合| 欧美乱大交xxxxx另类电影| 91精品视频免费观看| 久热精品视频在线免费观看| 欧美精品久久久久a| 日韩在线视频播放| 国产成人一区二区三区小说| 国产精品三级久久久久久电影| 欧美高跟鞋交xxxxhd| 国内精品久久久久久| 色天天综合狠狠色| 亚洲国产精品美女| 亚洲欧洲日产国产网站| 日韩黄在线观看| 在线日韩第一页| 懂色aⅴ精品一区二区三区蜜月| 精品爽片免费看久久| 97香蕉久久超级碰碰高清版| 在线观看国产欧美| 久久久久久亚洲精品中文字幕| 成人精品久久av网站| 欧美贵妇videos办公室| 国产69精品99久久久久久宅男| 日韩精品免费在线| 欧美xxxx18性欧美| 91精品视频观看| 亚洲国产精品成人va在线观看| 91中文字幕一区| 欧美网站在线观看| 69久久夜色精品国产69| 亚州国产精品久久久| 日韩中文字幕不卡视频| 亚洲精品黄网在线观看| 亚洲欧美日韩久久久久久| 美女久久久久久久| 欧美日韩国产中字| 久久精品99久久香蕉国产色戒| 亚洲视频免费一区| 亚洲成人黄色网址| 在线视频国产日韩| 欧美高清电影在线看| 亚洲综合色av| 国产精品a久久久久久| 欧美一区二区三区艳史| 91久久精品视频| 成人一区二区电影| 国产98色在线| 成人自拍性视频| 亚洲国产欧美一区二区丝袜黑人| 欧美激情精品久久久久久蜜臀| 国产精品草莓在线免费观看| 最近中文字幕日韩精品| 国产视频久久久久| 欲色天天网综合久久| 最新国产精品亚洲| 亚洲午夜国产成人av电影男同| 久久国产精品久久久久| 91香蕉电影院| 亚洲成人激情视频| 国产精品一区久久久| 久久久久久久久久久人体| 永久555www成人免费| 国产精品视频yy9099| 欧美一二三视频| 国产成人精品日本亚洲专区61| 欧美视频在线观看 亚洲欧| 亚洲天堂免费观看| 在线观看欧美日韩国产| 亚洲欧美日韩一区二区三区在线| 久久天天躁狠狠躁老女人| 精品一区二区三区四区| 在线看欧美日韩| 粉嫩av一区二区三区免费野| 日韩精品亚洲元码| 国产午夜精品视频| 亚洲的天堂在线中文字幕| 国产亚洲欧洲高清| 欧美成人精品一区二区三区| 亚洲精品资源美女情侣酒店| 欧洲日本亚洲国产区| 中文字幕在线亚洲| 久久久av一区| 亚洲综合在线做性| 欧美色道久久88综合亚洲精品| 亚洲精品视频久久| 国产精品高潮粉嫩av| 狠狠躁天天躁日日躁欧美| 欧美色videos| 91在线视频导航| 日韩欧美亚洲成人| 中文字幕免费国产精品| 一本色道久久88精品综合| 国产亚洲精品一区二555| 国产精品午夜国产小视频| 26uuu另类亚洲欧美日本老年| 91免费高清视频| 成人av在线网址| 欧美一区在线直播| 久久国产精品99国产精| 日本不卡视频在线播放| 日本高清视频一区| 精品国偷自产在线| 日韩av第一页| 57pao国产精品一区| 国内精品中文字幕| 97在线视频一区| 日韩免费看的电影电视剧大全| 色琪琪综合男人的天堂aⅴ视频| 91av在线播放| 久久精品视频在线播放| 国产欧美久久一区二区| 91香蕉国产在线观看| 国产在线拍揄自揄视频不卡99| 亚洲日韩中文字幕在线播放| 色综合久久久久久中文网| 欧美一区亚洲一区| 亚洲精品福利在线观看| 国产精品aaaa| 日韩在线一区二区三区免费视频| 这里只有精品视频| 国产精品久久久久久久av电影| 亚洲精品久久久久久久久久久久久| 日韩精品久久久久久福利| 91精品久久久久久久久不口人| 亚洲视频欧洲视频| 久久久亚洲国产天美传媒修理工|