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

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

c++中關于new的用法介紹

2020-02-24 14:24:00
字體:
來源:轉載
供稿:網友

大家在學習C++的時候是不是都會看到有new呢?那么你知道怎么使用new嗎?相信這個問題是很多小伙伴們都好奇的,那么我們現在就去看看c++中關于new的用法介紹。

一. 簡介
new有三種使用方式:plain new,nothrow new和placement new。

(1)plain new顧名思義就是普通的new,就是我們慣常使用的new。在C++中是這樣定義的:
??? void* operator new(std::size_t) throw(std::bad_alloc);
??? void operator delete(void *) throw();

提示:plain new在分配失敗的情況下,拋出異常std::bad_alloc而不是返回NULL,因此通過判斷返回值是否為NULL是徒勞的。

(2)nothrow new是不拋出異常的運算符new的形式。nothrow new在失敗時,返回NULL。定義如下:
??? void * operator new(std::size_t,const std::nothrow_t&) throw();
??? void operator delete(void*) throw();

(3)placement new意即“放置”,這種new允許在一塊已經分配成功的內存上重新構造對象或對象數組。placement new不用擔心內存分配失敗,因為它根本不分配內存,它做的唯一一件事情就是調用對象的構造函數。定義如下:
??? void* operator new(size_t,void*);
??? void operator delete(void*,void*);

提示1:palcement new的主要用途就是反復使用一塊較大的動態分配的內存來構造不同類型的對象或者他們的數組。

提示2:placement new構造起來的對象或其數組,要顯示的調用他們的析構函數來銷毀,千萬不要使用delete。

char* p = new(nothrow) char[100];
long *q1 = new(p) long(100);
int *q2 = new(p) int[100/sizeof(int)];

二.實例

1.plain new/delete.普通的new
定義如下:
void *operator new(std::size_t) throw(std::bad_alloc);
void operator delete(void*) throw();

注:標準C++ plain new失敗后拋出標準異常std::bad_alloc而非返回NULL,因此檢查返回值是否為NULL判斷分配是否成功是徒勞的。

測試程序:

?

#include "stdafx.h"
#include <iostream>
using namespace std;

?

char *GetMemory(unsigned long size)
{
char *p=new char[size];//分配失敗,不是返回NULL
return p;
}

int main()
{
try
{
? char *p=GetMemory(10e11);// 分配失敗拋出異常std::bad_alloc
? //...........
? if(!p)//徒勞
?? cout<<"failure"<<endl;
? delete [] p;

}
catch(const std::bad_alloc &ex)
{
? cout<<ex.what()<<endl;
}

??? return 0;
}


2.nothrow new/delete不拋出異常的運算符new的形式,new失敗時返回NULL。
定義如下:

?

?

?


void *operator new(std::size_t,const std::nothrow_t&) throw();
void operator delete(void*) throw();
struct nothrow_t{};? const nothrow_t nothrow;//nothrow作為new的標志性啞元


測試程序:

?

?

?


#include "stdafx.h"
#include <iostream>
#include <new>
using namespace std;

?

char *GetMemory(unsigned long size)
{
char *p=new(nothrow) char[size];//分配失敗,是返回NULL
if(NULL==p)
? cout<<"alloc failure!"<<endl;
return p;
}

int main()
{
try
{
? char *p=GetMemory(10e11);
? //...........
? if(p==NULL)
?? cout<<"failure"<<endl;
? delete [] p;

}
catch(const std::bad_alloc &ex)
{
? cout<<ex.what()<<endl;
}

??? return 0;
}


3.placement new/delete 主要用途是:反復使用一塊較大的動態分配成功的內存來構造不同類型的對象或者它們的數組。例如可以先申請一個足夠大的字符數組,然后當需要時在它上面構造不同類型的對象或數組。placement new不用擔心內存分配失敗,因為它根本不分配內存,它只是調用對象的構造函數。

?

測試程序:

?

#include "stdafx.h"
#include <iostream>
#include <new>
using namespace std;

?

class ADT
{
int i;
int j;
public:
ADT()
{
}
~ADT()
{
}
};

int main()
{
char *p=new(nothrow) char[sizeof(ADT)+2];
if(p==NULL)
? cout<<"failure"<<endl;

ADT *q=new(p) ADT;? //placement new:不必擔心失敗
// delete q;//錯誤!不能在此處調用delete q;
q->ADT::~ADT();//顯示調用析構函數
delete []p;
??? return 0;
}


注:使用placement new構造起來的對象或數組,要顯式調用它們的析構函數來銷毀(析構函數并不釋放對象的內存),千萬不要使用delete.這是因為placement new構造起來的對象或數組大小并不一定等于原來分配的內存大小,使用delete會造成內存泄漏或者之后釋放內存時出現運行時錯誤。

上文中小編對c++中關于new的用法介紹進行了詳細的分析,有需要的朋友可以過來參考下,希望對大家有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久影视| 久久久国产精品x99av| 尤物九九久久国产精品的分类| 午夜精品久久17c| 国产精品久久久久久中文字| 日韩国产欧美精品一区二区三区| 欧美激情亚洲另类| 97国产精品免费视频| 精品国产91久久久| 欧美洲成人男女午夜视频| 欧美日韩国产专区| 欧美日韩一区二区免费视频| 中文字幕精品网| 亚洲欧美另类国产| 成人h猎奇视频网站| 日韩在线www| 亚洲天堂2020| 国产九九精品视频| 日韩电影第一页| 日韩av在线直播| 欧美黑人狂野猛交老妇| 久久久久日韩精品久久久男男| 亚洲一区二区三区乱码aⅴ| 欧美国产高跟鞋裸体秀xxxhd| 久久精品久久精品亚洲人| 国产精品欧美日韩一区二区| 精品国产自在精品国产浪潮| 亚洲视频精品在线| 欧美激情视频在线| 日韩中文在线不卡| 91亚洲精品久久久久久久久久久久| 91在线|亚洲| 久久久久久久久久久免费| 91免费的视频在线播放| 一区二区三区久久精品| 久久久999精品| 国内精品久久久久久久| 国产亚洲欧洲高清一区| 欧美色视频日本版| 日韩美女免费线视频| 亚洲第一区中文99精品| 国产精品吊钟奶在线| 国产91热爆ts人妖在线| 亚洲v日韩v综合v精品v| 91精品视频免费观看| 亚洲人成在线免费观看| 黑人巨大精品欧美一区二区免费| 欧美日韩国产区| 欧美中文在线免费| 国产精彩精品视频| 国产精品视频自在线| 91香蕉国产在线观看| 奇米影视亚洲狠狠色| 欧美成人黑人xx视频免费观看| 午夜精品久久久久久久久久久久久| 欧美日韩ab片| 日韩亚洲欧美中文在线| 欧美激情亚洲一区| 成人国产精品免费视频| 中文字幕一区电影| 亚洲性生活视频| 久久久久久久999精品视频| 日韩在线免费观看视频| 欧美日韩一区二区在线播放| 欧美黑人国产人伦爽爽爽| 日韩色av导航| 国产精品成人播放| 亚洲a在线观看| 中文一区二区视频| 欧美成人精品一区二区| 国产一区二区久久精品| 中文字幕亚洲无线码a| 国产精品观看在线亚洲人成网| 国产精品高清在线观看| 国产精品黄色影片导航在线观看| 在线观看亚洲区| 亚洲精品免费av| 国产精品黄视频| 欧美成人国产va精品日本一级| 久久伊人免费视频| 国产欧美日韩免费| 亚洲国产成人久久综合| 欧美成人国产va精品日本一级| 久久久国产精品视频| 日韩中文字幕免费| 国产精品r级在线| 97在线视频免费播放| 亚洲福利精品在线| 日韩精品一二三四区| 亚洲一区制服诱惑| 91精品国产色综合久久不卡98| 精品久久久久久中文字幕大豆网| 91国偷自产一区二区三区的观看方式| 色琪琪综合男人的天堂aⅴ视频| 国产午夜精品免费一区二区三区| 国产成人小视频在线观看| 精品呦交小u女在线| 午夜精品视频在线| 91精品国产高清自在线| 国产精品久久久久久网站| 久久精品视频在线| 国产精品久久久亚洲| 日韩视频永久免费观看| 欧美裸体xxxx极品少妇软件| 欧美国产日韩xxxxx| 日韩成人在线观看| www.久久久久久.com| 亚洲最大中文字幕| 狠狠躁夜夜躁久久躁别揉| 久久久久久久亚洲精品| 精品国偷自产在线视频| 欧美日韩xxx| 日本久久久久久久| 精品久久久久久久久久久久久| 日韩h在线观看| 亚洲www在线观看| 2019日本中文字幕| 国产精品午夜国产小视频| 91最新在线免费观看| 日韩国产欧美精品一区二区三区| 91热福利电影| 亚洲成av人片在线观看香蕉| 亚洲福利视频免费观看| 疯狂做受xxxx欧美肥白少妇| 久久精品国产精品| 久久伊人色综合| 成人黄色生活片| 亚洲国产成人久久综合一区| 日本一区二区三区四区视频| 91精品久久久久久| 欧美体内谢she精2性欧美| 在线观看欧美日韩| 欧美激情成人在线视频| 国产精品观看在线亚洲人成网| 中文字幕九色91在线| 欧美性理论片在线观看片免费| 久久精品国产96久久久香蕉| 91网站在线免费观看| 亚洲**2019国产| 亚洲欧美成人一区二区在线电影| 性色av一区二区咪爱| 国产精品国产三级国产专播精品人| 日韩免费观看高清| 国产欧美一区二区三区久久| 国产日韩欧美中文在线播放| 欧美成人精品影院| 精品国产一区二区三区四区在线观看| 亚洲欧美在线免费观看| 日韩一级裸体免费视频| 国产精品亚洲视频在线观看| 亚洲欧美中文日韩v在线观看| 国产成人亚洲综合青青| 91高清视频在线免费观看| 久久久在线免费观看| 国产精品视频免费在线| 欧美性猛交xxxx偷拍洗澡| 亚洲综合大片69999| 日韩中文字幕网址| 亚洲999一在线观看www| 成人国内精品久久久久一区| 国产精品手机播放| 91欧美激情另类亚洲| 中文字幕欧美精品在线| 国产精自产拍久久久久久|