1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // placenew2.cpp -- new, placement new, no delete
- #include <iostream>
- #include <string>
- #include <new>
- using namespace std;
- const int BUF = 512;
- class JustTesting
- {
- private:
- string words;
- int number;
- public:
- JustTesting(const string & s = "Just Testing", int n = 0)
- {words = s; number = n; cout << words << " constructed\n"; }
- ~JustTesting() { cout << words << " destroyed\n";}
- void Show() const { cout << words << ", " << number << endl;}
- };
- int main()
- {
- char * buffer = new char[BUF]; // get a block of memory
- JustTesting *pc1, *pc2;
- pc1 = new (buffer) JustTesting; // place object in buffer
- pc2 = new JustTesting("Heap1", 20); // place object on heap
-
- cout << "Memory block addresses:\n" << "buffer: "
- << (void *) buffer << " heap: " << pc2 <<endl;
- cout << "Memory contents:\n";
- cout << pc1 << ": ";
- pc1->Show();
- cout << pc2 << ": ";
- pc2->Show();
- JustTesting *pc3, *pc4;
- // fix placement new location
- pc3 = new (buffer + sizeof (JustTesting))
- JustTesting("Better Idea", 6);
- pc4 = new JustTesting("Heap2", 10);
-
- cout << "Memory contents:\n";
- cout << pc3 << ": ";
- pc3->Show();
- cout << pc4 << ": ";
- pc4->Show();
-
- delete pc2; // free Heap1
- delete pc4; // free Heap2
- // explicitly destroy placement new objects
- pc3->~JustTesting(); // destroy object pointed to by pc3
- pc1->~JustTesting(); // destroy object pointed to by pc1
- delete [] buffer; // free buffer
- // std::cin.get();
- return 0;
- }
|