newplace.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // newplace.cpp -- using placement new
  2. #include <iostream>
  3. #include <new> // for placement new
  4. const int BUF = 512;
  5. const int N = 5;
  6. char buffer[BUF]; // chunk of memory
  7. int main()
  8. {
  9. using namespace std;
  10. double *pd1, *pd2;
  11. int i;
  12. cout << "Calling new and placement new:\n";
  13. pd1 = new double[N]; // use heap
  14. pd2 = new (buffer) double[N]; // use buffer array
  15. for (i = 0; i < N; i++)
  16. pd2[i] = pd1[i] = 1000 + 20.0 * i;
  17. cout << "Memory addresses:\n" << " heap: " << pd1
  18. << " static: " << (void *) buffer <<endl;
  19. cout << "Memory contents:\n";
  20. for (i = 0; i < N; i++)
  21. {
  22. cout << pd1[i] << " at " << &pd1[i] << "; ";
  23. cout << pd2[i] << " at " << &pd2[i] << endl;
  24. }
  25. cout << "\nCalling new and placement new a second time:\n";
  26. double *pd3, *pd4;
  27. pd3= new double[N]; // find new address
  28. pd4 = new (buffer) double[N]; // overwrite old data
  29. for (i = 0; i < N; i++)
  30. pd4[i] = pd3[i] = 1000 + 40.0 * i;
  31. cout << "Memory contents:\n";
  32. for (i = 0; i < N; i++)
  33. {
  34. cout << pd3[i] << " at " << &pd3[i] << "; ";
  35. cout << pd4[i] << " at " << &pd4[i] << endl;
  36. }
  37. cout << "\nCalling new and placement new a third time:\n";
  38. delete [] pd1;
  39. pd1= new double[N];
  40. pd2 = new (buffer + N * sizeof(double)) double[N];
  41. for (i = 0; i < N; i++)
  42. pd2[i] = pd1[i] = 1000 + 60.0 * i;
  43. cout << "Memory contents:\n";
  44. for (i = 0; i < N; i++)
  45. {
  46. cout << pd1[i] << " at " << &pd1[i] << "; ";
  47. cout << pd2[i] << " at " << &pd2[i] << endl;
  48. }
  49. delete [] pd1;
  50. delete [] pd3;
  51. // cin.get();
  52. return 0;
  53. }