您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++中new類型的運算符怎么使用”,在日常操作中,相信很多人在C++中new類型的運算符怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++中new類型的運算符怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
new operator,平時用的最多的new操作符,其對應delete operator,不能被重載,其包含兩個操作(既申請空間,又調用構造函數)
(1)使用::operator new申請內存
(2)調用類的構造函數
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; }
運行結果如下:
::operator new,只會申請空間,不會調用構造函數,可以被重載,其對應 ::operator delete (只申請空間)
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; }
運行結果如下:
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; }
運行結果如下:
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; }
運行結果如下:
place new在已經構建好的內存中創建對象,其只會返回已經申請好的內存指針,多用在高性能場景下,提前申請好內存,可以節省申請內存開消 (只調用構造函數)
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; //調用全局::new (pChar) CTestUse4,new (pChar) CTestUse4調用重載new //delete pCase; pCase->~CTestUse4(); } int main(int argc, char *argv[]) { test4(); return 0; }
運行結果如下:
到此,關于“C++中new類型的運算符怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。