C++/Development/new delete

Материал из C\C++ эксперт
Перейти к: навигация, поиск

bad_alloc standard exception

<source lang="cpp">

  1. include <iostream>
  2. 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">

  1. include <iostream>
  2. 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">

  1. include <iostream>

using std::cout; using std::endl;

  1. 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">

  1. include <iostream>
  2. 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>