欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.new操作符

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

  • (1)使用::operator new申請內(nèi)存
  • (2)調(diào)用類的構造函數(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;
}

運行結果如下:

2.::operator new

::operator new,只會申請空間,不會調(diào)用構造函數(shù),可以被重載,其對應 ::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;
}

運行結果如下:

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;
}

運行結果如下:

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;
}

運行結果如下:

3.place new

place new在已經(jīng)構建好的內(nèi)存中創(chuàng)建對象,其只會返回已經(jīng)申請好的內(nèi)存指針,多用在高性能場景下,提前申請好內(nèi)存,可以節(jié)省申請內(nèi)存開消 (只調(diào)用構造函數(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;
}

運行結果如下:

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

相關文章

  • C語言自定義軍旗游戲源碼

    C語言自定義軍旗游戲源碼

    這篇文章主要為大家詳細介紹了C語言自定義軍旗游戲源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C++11 移動構造函數(shù)的使用

    C++11 移動構造函數(shù)的使用

    本文主要介紹了C++11 移動構造函數(shù)的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言學生信息管理系統(tǒng)

    C語言學生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言學生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Qt?加載?libjpeg?庫出現(xiàn)“長跳轉已經(jīng)運行”錯誤問題解決

    Qt?加載?libjpeg?庫出現(xiàn)“長跳轉已經(jīng)運行”錯誤問題解決

    這篇文章主要介紹了Qt?加載?libjpeg?庫出現(xiàn)“長跳轉已經(jīng)運行”錯誤,本文給大家分享完美解決方案,需要的朋友可以參考下
    2023-04-04
  • C++11的for循環(huán)的新用法(推薦)

    C++11的for循環(huán)的新用法(推薦)

    C++11這次的更新帶來了令很多C++程序員期待已久的for range循環(huán),每次看到javascript, lua里的for range,心想要是C++能有多好,心里別提多酸了。這次C++11不負眾望,再也不用羨慕別家人的for range了。下面看下C++11的for循環(huán)的新用法
    2021-11-11
  • C++中函數(shù)重載詳解

    C++中函數(shù)重載詳解

    大家好,本篇文章主要講的是C++中函數(shù)重載詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 解析使用C++編寫無錯代碼的方法技巧

    解析使用C++編寫無錯代碼的方法技巧

    本篇文章是對使用C++編寫無錯代碼的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++ 搬水果貪心算法實現(xiàn)代碼

    C++ 搬水果貪心算法實現(xiàn)代碼

    這篇文章主要介紹了C++ 搬水果貪心算法實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2017-06-06
  • C語言*與&在操作線性表的作用詳解

    C語言*與&在操作線性表的作用詳解

    本文主要介紹了C語言*與&在操作線性表的作用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言在linux下編程詳解

    C語言在linux下編程詳解

    這篇文章主要介紹了linux下基于C語言的編程,實例分析了基本使用技巧與相關概念,具有一定參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論