C++/Development/new delete
Содержание
bad_alloc standard exception
<source lang="cpp">
- include <iostream>
- include <exception>
using namespace std; int main () {
try { int* myarray= new int[1000]; } catch (exception& e) { cout << "Standard exception: " << e.what() << endl; } return 0;
}
</source>
delete memory allocate for objects
<source lang="cpp">
- include <iostream>
- include <stdlib.h>
using namespace std; class loc {
int longitude, latitude; public: loc(void) {} loc (int lg, int lt) { longitude = lg; latitude = lt; } void show(void) { cout << longitude << " "; 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)
{ cout << "In the custom new function." << endl; return malloc(size); }
void loc::operator delete(void *p)
{ cout << "In the custom delete function." << endl; free(p); }
void *loc::operator new[](size_t size) {
cout << "In the custom new ARRAY allocator function." << endl; return malloc(size);
} void loc::operator delete[](void *p) {
cout << "Freeing the ARRAY in the custom delete function." << endl; free(p);
} int main(void) {
loc *p1, *p2; int i; p1 = new loc(10,20); if (!p1) { cout << "Allocation error\n"; exit(1); } p2 = new loc[10]; if (!p2) { cout << "Allocation error\n"; exit(1); } p1->show(); for(i=0; i<10; i++) p2[i].show(); delete p1; delete [] p2;
}
</source>
Demonstrating new throwing bad_alloc when memory is not allocated
<source lang="cpp">
- include <iostream>
using std::cout; using std::endl;
- include <new>
using std::bad_alloc; int main() {
double *ptr[ 50 ]; try { for ( int i = 0; i < 50; i++ ) { ptr[ i ] = new double[ 5000000 ]; cout << "Allocated 5000000 doubles in ptr[ " << i << " ]\n"; } } catch ( bad_alloc exception ) { cout << "Exception occurred: " << exception.what() << endl; } return 0;
}
</source>
Use new operator to allocate memory for object
<source lang="cpp">
- include <iostream>
- include <stdlib.h>
using namespace std; class loc {
int longitude, latitude; public: loc(void) {} loc (int lg, int lt) { longitude = lg; latitude = lt; } void show(void) { cout << longitude << " "; cout << latitude << endl; } void *operator new(size_t size); void operator delete(void *p);
}; void *loc::operator new(size_t size) {
cout << "In the custom new function." << endl; return malloc(size);
} void loc::operator delete(void *p) {
cout << "In the custom delete function." << endl; free(p);
} int main(void) {
loc *p1, *p2; p1 = new loc(10,20); if (!p1) { cout << "Allocation error\n"; exit(1); } p2 = new loc(-10,-20); if (!p2) { cout << "Allocation error\n"; exit(1); } p1->show(); p2->show(); delete p1; delete p2; exit (0);
}
</source>