最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分享C++三種類型new類型的運算符使用詳情

 更新時間:2022年04月10日 18:37:30   作者:hsy12342611  
這篇文章主要介紹了C++三種類型new運算符的使用詳情,文章基于C++運算展開主題內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下

1.new操作符

new operator,平時用的最多的new操作符,其對應(yīng)delete operator,不能被重載,其包含兩個操作(既申請空間,又調(diào)用構(gòu)造函數(shù))

  • (1)使用::operator new申請內(nèi)存
  • (2)調(diào)用類的構(gòu)造函數(shù)
class CTestUse
{
public:
? ? CTestUse() { cout << __FUNCTION__ << endl; }
? ? virtual ~CTestUse() { cout << __FUNCTION__ << endl; }
?
private:
};
?
void test()
{
? ? string *pStr = new string("new operator");
? ? cout << *pStr << endl;
? ? delete pStr;
?
? ? CTestUse *pCase = new CTestUse;
? ? delete pCase;
}
?
?
int main(int argc, char *argv[])
{
? ? test();
?
? ? return 0;
}

運行結(jié)果如下:

2.::operator new

::operator new,只會申請空間,不會調(diào)用構(gòu)造函數(shù),可以被重載,其對應(yīng) ::operator delete (只申請空間)

2.1原始調(diào)用

class CTestUse1
{
public:
? ? CTestUse1() { cout << __FUNCTION__ << endl; }
? ? virtual ~CTestUse1() { cout << __FUNCTION__ << endl; }
? ? void show() { cout << __FILE__ << " " << __FUNCTION__ << endl; }
?
private:
};
?
?
void test1()
{
? ? CTestUse1 *pCase = (CTestUse1 *)::operator new (sizeof(CTestUse1));
? ? pCase->show();
? ? ::operator delete(pCase);
?
}
?
int main(int argc, char *argv[])
{
? ? test1();
?
? ? return 0;
}

運行結(jié)果如下:

2.2重載1

class CTestUse2
{
public:
? ? CTestUse2() { cout << __FUNCTION__ << endl; }
? ? virtual ~CTestUse2() { cout << __FUNCTION__ << endl; }
? ? void show() { cout << __FILE__ << " " << __FUNCTION__ << endl; }
?
? ? void* operator new(size_t size) {
? ? ? ? cout << __FUNCTION__ << endl;
? ? ? ? return ::operator new(size);
? ? }
?
? ? void operator delete(void* ptr) {
? ? ? ? cout << __FUNCTION__ << endl;
? ? ? ? ::operator delete(ptr);
? ? }
?
private:
};
?
void test2()
{
? ? CTestUse2 *pCase = new CTestUse2;
? ? pCase->show();
? ? delete pCase;
?
}
?
int main(int argc, char *argv[])
{
? ? test2();
?
? ? return 0;
}

運行結(jié)果如下:

2.3重載2

class CTestUse3
{
public:
? ? CTestUse3() { cout << __FUNCTION__ << endl; }
? ? virtual ~CTestUse3() { cout << __FUNCTION__ << endl; }
? ? void show() { cout << __FILE__ << " " << __FUNCTION__ << endl; }
?
? ? void* operator new(size_t size, string str) {
? ? ? ? cout << __FUNCTION__ << str << endl;
? ? ? ? return ::operator new(size);
? ? }
?
? ? void operator delete(void* ptr) {
? ? ? ? cout << __FUNCTION__ << endl;
? ? ? ? ::operator delete(ptr);
? ? }
?
private:
};
?
void test3()
{
? ? CTestUse3 *pCase = new ("heshiyang") CTestUse3;
? ? pCase->show();
? ? delete pCase;
?
}
?
int main(int argc, char *argv[])
{
? ? test3();
?
? ? return 0;
}

運行結(jié)果如下:

3.place new

place new在已經(jīng)構(gòu)建好的內(nèi)存中創(chuàng)建對象,其只會返回已經(jīng)申請好的內(nèi)存指針,多用在高性能場景下,提前申請好內(nèi)存,可以節(jié)省申請內(nèi)存開消 (只調(diào)用構(gòu)造函數(shù))

class CTestUse4
{
public:
? ? CTestUse4() { cout << __FUNCTION__ << endl; }
? ? virtual ~CTestUse4() { cout << __FUNCTION__ << endl; }
? ? void show() { cout << __FILE__ << " " << __FUNCTION__ << endl; }
?
? ? void* operator new(size_t size, void* p) {
? ? ? ? cout << __FUNCTION__ << endl;
? ? ? ? return p;
? ? }
?
? ? void operator delete(void* ptr) {
? ? ? ? cout << __FUNCTION__ << endl;
? ? ? ? ::operator delete(ptr);
? ? }
?
private:
};
?
void test4()
{
? ? char* pChar = new char[sizeof(CTestUse4)];
? ? CTestUse4* pCase = new (pChar) CTestUse4; //調(diào)用全局::new (pChar) CTestUse4,new (pChar) CTestUse4調(diào)用重載new
? ? //delete pCase;
? ? pCase->~CTestUse4();
}
?
int main(int argc, char *argv[])
{
? ? test4();
?
? ? return 0;
}

運行結(jié)果如下:

到此這篇關(guān)于C++三種類型new運算符的使用詳情的文章就介紹到這了,更多相關(guān)C++ new運算符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++類中的繼承實例詳解

    C++類中的繼承實例詳解

    這篇文章主要介紹了C++類中的繼承實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C++多重繼承二義性原理實例解析

    C++多重繼承二義性原理實例解析

    這篇文章主要介紹了C++多重繼承二義性原理實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • C++ 數(shù)字的反轉(zhuǎn)實現(xiàn)實例

    C++ 數(shù)字的反轉(zhuǎn)實現(xiàn)實例

    這篇文章主要介紹了C++ 數(shù)字的反轉(zhuǎn)實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言高級教程之變長數(shù)組詳解

    C語言高級教程之變長數(shù)組詳解

    這篇文章主要介紹了C語言中變長數(shù)組的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • linux下C語言中的mkdir函數(shù)與rmdir函數(shù)

    linux下C語言中的mkdir函數(shù)與rmdir函數(shù)

    以下是對C語言中的mkdir函數(shù)與rmdir函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • 通過c語言調(diào)用系統(tǒng)curl動態(tài)庫的示例詳解

    通過c語言調(diào)用系統(tǒng)curl動態(tài)庫的示例詳解

    這篇文章中我們將通過一個簡單的示例來講解如何在Ubuntu系統(tǒng)中通過C語言調(diào)用動態(tài)庫(共享庫)的方法,我們將使用libcurl庫,這是一個基于客戶端的URL傳輸庫,廣泛用于各種程序和應(yīng)用中以訪問網(wǎng)頁和服務(wù)器數(shù)據(jù),需要的朋友可以參考下
    2024-03-03
  • C語言數(shù)據(jù)結(jié)構(gòu)與算法之鏈表(一)

    C語言數(shù)據(jù)結(jié)構(gòu)與算法之鏈表(一)

    鏈表是線性表的鏈?zhǔn)酱鎯Ψ绞?。鏈表的?nèi)存是不連續(xù)的,前一個元素存儲地址的下一個地址中存儲的不一定是下一個元素。小編今天就將帶大家深入了解一下鏈表,快來學(xué)習(xí)吧
    2021-12-12
  • 淺析C/C++中sort函數(shù)的用法

    淺析C/C++中sort函數(shù)的用法

    做項目的時候,排序是一種經(jīng)常要用到的操作。如果每次都自己寫個冒泡之類的O(n^2)排序,不但程序容易超時,而且浪費寶貴的時間,還很有可能寫錯。STL里面有個sort函數(shù),可以直接對數(shù)組排序,復(fù)雜度為n*log2(n)。
    2014-09-09
  • C語言實現(xiàn)ATM系統(tǒng)程序的完整代碼

    C語言實現(xiàn)ATM系統(tǒng)程序的完整代碼

    這篇文章主要介紹了C語言實現(xiàn)ATM系統(tǒng)程序的完整代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • C++中g(shù)etline()的用法詳解

    C++中g(shù)etline()的用法詳解

    這篇文章主要介紹了C++中g(shù)etline()的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評論

平山县| 鄯善县| 疏勒县| 吉林市| 芷江| 阜新| 泌阳县| 泽库县| 铜陵市| 临武县| 汽车| 郑州市| 屏南县| 丹棱县| 遵义市| 六安市| 乌兰察布市| 浪卡子县| 卓尼县| 尚志市| 襄垣县| 昭通市| 景泰县| 宣城市| 河北省| 北碚区| 延吉市| 满洲里市| 慈溪市| 澜沧| 岳普湖县| 通江县| 锡林郭勒盟| 武安市| 西峡县| 临清市| 闸北区| 诏安县| 荆州市| 墨脱县| 汤原县|