operator new/delete,operator-> / *【C++运算符重载】
生活随笔
收集整理的這篇文章主要介紹了
operator new/delete,operator-> / *【C++运算符重载】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- operator new/delete 預定義的內存
- operator new/delete 語法格式
- 舉例說明
operator new/delete 預定義的內存
適用于極個別情況需要定制的時候才用的到。一般很少用,比如定制內存。
operator new/delete 語法格式
void * operator new(size_t); void operator delete(void *); void * operator new[](size_t); void operator delete[](void *);舉例說明
使用:void * operator new(size_t);
#include <iostream> #include <memory> using namespace std;class A { public:A(){}~A(){cout << "~A()" << endl;}void func(){cout << x <<" " << y << endl;}void* operator new(size_t size){cout << "void* operator new(size_t)" << endl;cout << size << endl;void* p = malloc(size);((A*)p)->x = 100;//底層提前初始化 寫死((A*)p)->y = 200;//底層提前初始化 寫死return p;} private:int x;int y; };int main() {A* pa = new A;pa->func();return 0; }運行結果:
上面代碼有問題,只有malloc申請內存,沒有free釋放內存,通過引入void operator delete(void *);進行說明:
運行結果:
使用void * operator new[](size_t);
#include <iostream> #include <memory> using namespace std;class A { public:A(){cout << "A()" << endl;}~A(){cout << "~A()" << endl;}void func(){cout << x <<" " << y << endl;}void* operator new(size_t size){cout << "void* operator new(size_t)" << endl;cout << size << endl;void* p = malloc(size);((A*)p)->x = 100;//底層初始化 寫死((A*)p)->y = 200;//底層初始化 寫死cout << p << endl;return p;}void operator delete(void* p){cout << "operator delete(void* p)" << endl;cout << p << endl;free(p);}void* operator new[](size_t size){cout << "void* operator new[](size_t size)" << endl;cout << size << endl;void* p = malloc(size);return p;}private:int x;int y; };int main() {A* pa = new A[10];return 0; }運行結果:
多出來的4字節用于記錄 A* pa = new A[10];中的10。
使用void operator delete[](void*);
#include <iostream> #include <memory> using namespace std;class A { public:A(){cout << "A()" << endl;}~A(){cout << "~A()" << endl;}void func(){cout << x <<" " << y << endl;}void* operator new(size_t size){cout << "void* operator new(size_t)" << endl;cout << size << endl;void* p = malloc(size);((A*)p)->x = 100;//底層初始化 寫死((A*)p)->y = 200;//底層初始化 寫死cout << p << endl;return p;}void operator delete(void* p){cout << "operator delete(void* p)" << endl;cout << p << endl;free(p);}void* operator new[](size_t size){cout << "void* operator new[](size_t size)" << endl;cout << size << endl;void* p = malloc(size);cout << p << endl;return p;}void operator delete[](void *p){cout << "void operator delete[](void *p)" << endl;cout << p << endl;free(p);}private:int x;int y; };int main() {A* pa = new A[10];delete []pa;return 0; }運行結果:
總結
以上是生活随笔為你收集整理的operator new/delete,operator-> / *【C++运算符重载】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++智能指针详解【C++智能指针】
- 下一篇: tinyxml语法讲解之写xml