亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

分享C++三種類型new類型的運(yùn)算符使用詳情

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

1.new操作符

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

  • (1)使用::operator new申請(qǐng)內(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;
}

運(yùn)行結(jié)果如下:

2.::operator new

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

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

運(yùn)行結(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;
}

運(yùn)行結(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;
}

運(yùn)行結(jié)果如下:

3.place new

place new在已經(jīng)構(gòu)建好的內(nèi)存中創(chuàng)建對(duì)象,其只會(huì)返回已經(jīng)申請(qǐng)好的內(nèi)存指針,多用在高性能場(chǎng)景下,提前申請(qǐng)好內(nèi)存,可以節(jié)省申請(qǐng)內(nèi)存開(kā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;
}

運(yùn)行結(jié)果如下:

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

相關(guān)文章

最新評(píng)論