2
我正在寫一個簡單的程序來理解新的和刪除操作符重載。 size
參數如何傳遞給new
運算符?新增和刪除操作符重載
僅供參考,這裏是我的代碼:
#include<iostream>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
class loc{
private:
int longitude,latitude;
public:
loc(){
longitude = latitude = 0;
}
loc(int lg,int lt){
longitude -= lg;
latitude -= lt;
}
void show(){
cout << "longitude" << endl;
cout << "latitude" << endl;
}
void* operator new(size_t size);
void operator delete(void* p);
void* operator new[](size_t size);
void operator delete[](void* p);
};
void* loc :: operator new(size_t size){
void* p;
cout << "In overloaded new" << endl;
p = malloc(size);
cout << "size :" << size << endl;
if(!p){
bad_alloc ba;
throw ba;
}
return p;
}
void loc :: operator delete(void* p){
cout << "In delete operator" << endl;
free(p);
}
void* loc :: operator new[](size_t size){
void* p;
cout << "In overloaded new[]" << endl;
p = malloc(size);
cout << "size :" << size << endl;
if(!p){
bad_alloc ba;
throw ba;
}
return p;
}
void loc :: operator delete[](void* p){
cout << "In delete operator - array" << endl;
free(p);
}
int main(){
loc *p1,*p2;
int i;
cout << "sizeof(loc)" << sizeof(loc) << endl;
try{
p1 = new loc(10,20);
}
catch (bad_alloc ba){
cout << "Allocation error for p1" << endl;
return 1;
}
try{
p2 = new loc[10];
}
catch(bad_alloc ba){
cout << "Allocation error for p2" << endl;
return 1;
}
p1->show();
for(i = 0;i < 10;i++){
p2[i].show();
}
delete p1;
delete[] p2;
return 0;
}
我不假設[你先讀這個問題](http://stackoverflow.com/questions/4421706/operator-overloading/4421791#4421791) – WhozCraig
感謝WhozCraig。 – Angus
還要注意:'刪除p2;'應該是'delete [] p2;' –