国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C++堆對象如何禁用

開發(fā) 后端
C++堆對象產(chǎn)生方法注意就是通過使用new來進行操作。那么如果我們想要禁止產(chǎn)生C++堆對象又該如何進行操作呢?在這里將會給出正確的答案。

C++中對于內(nèi)存的相關知識是一個比較重要而且復雜的知識點,我們需要不斷的深入的對其進行研究。今天在這里我們將會針對C++堆對象的一些應用方法做一個詳細的介紹,應該可以幫助大家對此有一個深刻的認識。#t#

產(chǎn)生C++堆對象的方法是使用new操作,如果我們禁止使用new不就行了么。再進一步,new操作執(zhí)行時會調用operator new,而operator new是可以重載的。方法有了,就是使new operator 為private,為了對稱,最好將operator delete也重載為private。

現(xiàn)在,你也許又有疑問了,難道創(chuàng)建棧對象不需要調用new嗎?是的,不需要,因為創(chuàng)建棧對象不需要搜索內(nèi)存,而是直接調整堆棧指針,將對象壓棧,而operator new的主要任務是搜索合適的堆內(nèi)存,為C++堆對象分配空間,這在上面已經(jīng)提到過了。好,讓我們看看下面的示例代碼:

  1. #include stdlib.h 需要用到C式內(nèi)存分配函數(shù)   
  2. class Resource ; 代表需要被封裝的資源類   
  3. class NoHashObject   
  4. {   
  5.  private   
  6.   Resource ptr ;指向被封裝的資源   
  7.   ... ... 其它數(shù)據(jù)成員   
  8.   void operator new(size_t size) 非嚴格實現(xiàn),僅作示意之用   
  9.   {   
  10.    return malloc(size) ;   
  11.   }   
  12.   void operator delete(void pp) 非嚴格實現(xiàn),僅作示意之用   
  13.   {   
  14.    free(pp) ;   
  15.   }   
  16.  public   
  17.   NoHashObject()   
  18.   {   
  19.    此處可以獲得需要封裝的資源,并讓ptr指針指向該資源   
  20.    ptr = new Resource() ;   
  21.   }   
  22.   ~NoHashObject()   
  23.   {   
  24.    delete ptr ; 釋放封裝的資源   
  25.   }   
  26. }; 

NoHashObject現(xiàn)在就是一個禁止C++堆對象的類了,如果你寫下如下代碼:

  1. NoHashObject fp = new NoHashObject() ; 編譯期錯誤!   
  2. delete fp ;  

上面代碼會產(chǎn)生編譯期錯誤。好了,現(xiàn)在你已經(jīng)知道了如何設計一個禁止堆對象的類了,你也許和我一樣有這樣的疑問,難道在類NoHashObject的定義不能改變的情況下,就一定不能產(chǎn)生該類型的C++堆對象了嗎?不,還是有辦法的,我稱之為“暴力破解法”。C++是如此地強大,強大到你可以用它做你想做的任何事情。這里主要用到的是技巧是指針類型的強制轉換。

  1. void main(void)   
  2. {   
  3. char temp = new char[sizeof(NoHashObject)] ; 

 

強制類型轉換,現(xiàn)在ptr是一個指向NoHashObject對象的指針

  1. NoHashObject obj_ptr = (NoHashObject)temp ;  

temp = NULL ; 防止通過temp指針修改NoHashObject對象

再一次強制類型轉換,讓rp指針指向堆中NoHashObject對象的ptr成員

  1. Resource rp = (Resource)obj_ptr ;  

初始化obj_ptr指向的NoHashObject對象的ptr成員

  1. rp = new Resource() ;  

現(xiàn)在可以通過使用obj_ptr指針使用堆中的NoHashObject對象成員了

  1. ... ...   
  2. delete rp ;釋放資源   
  3. temp = (char)obj_ptr ;   
  4. obj_ptr = NULL ;防止懸掛指針產(chǎn)生   
  5. delete [] temp ;釋放NoHashObject對象所占的堆空間。   

 

上面的實現(xiàn)是麻煩的,而且這種實現(xiàn)方式幾乎不會在實踐中使用,但是我還是寫出來路,因為理解它,對于我們理解C++內(nèi)存對象是有好處的。對于上面的這么多強制類型轉換,其最根本的是什么了?我們可以這樣理解:

某塊內(nèi)存中的數(shù)據(jù)是不變的,而類型就是我們戴上的眼鏡,當我們戴上一種眼鏡后,我們就會用對應的類型來解釋內(nèi)存中的數(shù)據(jù),這樣不同的解釋就得到了不同的信息。

所謂強制類型轉換實際上就是換上另一副眼鏡后再來看同樣的那塊內(nèi)存數(shù)據(jù)。

另外要提醒的是,不同的編譯器對對象的成員數(shù)據(jù)的布局安排可能是不一樣的,比如,大多數(shù)編譯器將NoHashObject的ptr指針成員安排在對象空間的頭4個字節(jié),這樣才會保證下面這條語句的轉換動作像我們預期的那樣執(zhí)行:

  1. Resource rp = (Resource)obj_ptr ;  

但是,并不一定所有的編譯器都是如此。既然我們可以禁止產(chǎn)生某種類型的C++堆對象,那么可以設計一個類,使之不能產(chǎn)生棧對象嗎?當然可以。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-03 14:30:04

C++棧對象

2010-01-25 09:50:58

C++函數(shù)對象

2010-01-14 14:17:20

Visual C++

2010-01-26 15:51:06

C++變量

2010-01-25 14:18:46

C++對象模型

2010-01-28 10:33:10

C++開發(fā)程序

2011-08-25 15:35:18

Lua游戲對象

2010-02-06 10:50:10

C++統(tǒng)計對象個數(shù)

2010-01-27 10:13:22

C++類對象

2013-05-27 15:38:37

Java對象C++

2010-01-27 09:38:27

C++書籍

2010-01-26 10:53:58

學C++

2010-01-28 13:35:41

調用C++函數(shù)

2011-04-11 13:08:13

對象鏈表C++

2010-01-20 09:54:27

C++數(shù)據(jù)類型

2011-07-10 15:36:54

C++

2010-01-25 11:13:18

C++棧對象

2010-02-03 17:06:36

C++對象復制

2010-01-18 17:48:46

C++類對象

2010-01-20 09:48:44

面向對象
點贊
收藏

51CTO技術棧公眾號

欧美一级二级在线观看| 91av在线不卡| 亚洲这里只有精品| 国产精品美乳在线观看| 在线视频观看你懂的| 国产真实乱偷精品视频免| 国产成人精品一区| 日韩欧美三区| 亚洲福利小视频| 久草在线网址| 亚洲免费av观看| 成年人免费在线播放| 日本视频中文字幕一区二区三区| 国产精品久久久久久超碰| 在线不卡一区| 亚洲精品美女网站| 国产有码在线| 亚洲一区二区三区美女| 我看黄色一级片| 成人一区二区视频| 亚洲乱码一区二区三区| 99精品视频免费全部在线| 国产精品91免费在线| 都市激情亚洲欧美| 日韩视频免费在线观看| 黄色亚洲网站| 亚洲大胆人体在线| 中文字幕中文字幕在线十八区 | 亚洲成人网在线观看| 在线免费观看h| 亚洲人成网站精品片在线观看| 国产原创中文在线观看| 国产精品一区二区不卡| 四虎永久国产精品| 久久字幕精品一区| 日韩久久久久久久久久久久久| 亚洲人成久久| 国产一区二区三区免费不卡| 欧美大片免费看| 深夜成人在线| 亚洲第一在线视频| 丝袜老师在线| 一本大道久久加勒比香蕉| 免费在线成人激情电影| 色综合伊人色综合网站| 免费精品一区二区三区在线观看| 欧美大胆在线视频| 精品一区二区男人吃奶| 欧美中文字幕在线播放| 免费欧美激情| 亚洲free嫩bbb| 欧美三区不卡| 久久国产精品久久| 91亚洲精品国产| 婷婷亚洲久悠悠色悠在线播放 | 国产成人精品免费久久久久| 视频国产精品| 97在线视频免费| 欧美综合视频| 韩国美女久久| 亚洲美女又黄又爽在线观看| 午夜伦理福利在线| 日韩一区二区在线视频| 福利在线一区| 97自拍视频| 美腿丝袜亚洲一区| av天堂永久资源网| 亚洲精品国产一区二区三区四区在线| 一级在线观看| 亚洲电影免费观看| 视频一区中文字幕精品| 国产精品视频最多的网站| 欧美亚洲三区| 国产精品第12页| 色综合天天综合网天天狠天天| 青春草在线视频| 久久av在线看| 精品国产污污免费网站入口| 欧美性大战久久久久xxx| 欧美一区二区三区免费| 亚洲男男av| 亚洲成人福利片| 黄色网在线播放| 伊人男人综合视频网| 欧美wwwwww| 欧美另类一区| 中日韩av电影| 3p在线观看| 欧美精品性视频| 一本久久综合| 美女在线视频一区二区| 日韩一卡二卡三卡四卡| 高潮久久久久久久久久久久久久 | 99精品免费在线观看| 国产精品传媒入口麻豆| 毛片在线播放网址| 亚洲图片欧美午夜| 免费成人高清在线视频theav| 欧美精品v日韩精品v国产精品| 26uuu国产电影一区二区| 免费动漫网站在线观看| 日韩在线激情视频| 成人丁香基地| 一区二区三区四区视频在线观看| 欧美日韩国产大片| 日本va中文字幕| 欧美日韩高清在线| xvideos.蜜桃一区二区| 黄色小网站91| 国产精品美女久久久久久2018| 性欧美video高清bbw| 国产成人亚洲综合91| 国产美女娇喘av呻吟久久| 免费人成在线观看网站| 久久久免费观看| 美女久久久精品| 天堂在线中文字幕| 欧美极品美女电影一区| 奇米精品一区二区三区在线观看一| 蜜桃传媒九九九| 中文字幕精品在线| 翔田千里一区二区| a视频在线看| y97精品国产97久久久久久| 久久性天堂网| 欧洲伦理片一区 二区 三区| 久久久久久网址| 国产成人免费视频| 国产传媒在线播放| 国产一区二区丝袜| 欧美高清在线精品一区| 日本精品裸体写真集在线观看| 欧美日韩一区综合| 欧美性猛交视频| 曰本一区二区三区视频| 少妇人妻在线视频| 国产视频精品va久久久久久| 亚洲伦理一区| 日本一二三区在线视频| 日韩免费观看av| 国产精品妹子av| 欧美午夜免费| 国产精品白浆| 妺妺窝人体色777777| 精品成a人在线观看| 合欧美一区二区三区| 久艹在线视频| 国产精品18久久久久久首页狼| 国产精品日韩成人| 日韩一区二区三区色| 91午夜在线观看| 亚洲欧美在线x视频| 国内成人自拍视频| 日韩伦理在线一区| 潘金莲一级淫片aaaaa免费看| 欧美成人精精品一区二区频| 好看的日韩av电影| 中国日本在线视频中文字幕| 不卡视频一区二区三区| 色94色欧美sute亚洲13| 午夜免费一区| 视频国产一区二区三区| 91精品视频在线| 日韩欧美国产高清91| 欧美jjzz| 动漫一区在线| 亚洲一区二区自拍偷拍| 日韩精品视频在线观看网址| 国产一区二区剧情av在线| 色天使综合视频| 黄色片视频在线播放| 国内精品久久久久久| 中文一区二区在线观看| 国产精品tv| av漫画网站| 91在线播放视频| 日韩一卡二卡三卡国产欧美| 韩国视频一区二区| 国产视频一区二区在线播放| 成人伊人222| 亚洲影视九九影院在线观看| 欧美另类z0zxhd电影| 青青草成人在线观看| 日韩电影免费观| 三年中国国语在线播放免费| 91av视频导航| 色94色欧美sute亚洲线路一久| 奇米精品一区二区三区在线观看| ww久久综合久中文字幕| 丝袜制服一区二区三区| 91老司机在线| 亚洲风情亚aⅴ在线发布| 久久久久久亚洲综合| 欧美一区电影| 欧美极品少妇videossex| 国产aaa免费视频| 国产成人在线一区二区| 日韩写真欧美这视频| 久久伊人中文字幕| 国产电影一区二区在线观看|