Listing 1: Visual C++ test

#include <iostream>
#include <stdlib.h>
using namespace std;

class X
    {
public:
    X(bool const throwing = false)
        {
        if (throwing)
            throw 1;
        }
    void *operator new(size_t n)
        {
        cout << endl;
        cout << "operator new(" << n
                << ")" << endl;
        return malloc(n);
        }
    void *operator new(size_t n1, size_t n2)
        {
        cout << endl;
        cout << "operator new(" << n1
                << ", " << n2 << ")" << endl;
        return malloc(n1);
        }
    void operator delete(void *p, size_t n)
        {
        cout << "operator delete(" << n
                << ")" << endl;
        free(p);
        }
private:
    // makes sizeof(X) predictable
    char space[100];
    };

int main()
    {
    X *x;
    //
    // test 1: non-placement, no throw
    //
    x = new X;
    delete x;
    //
    // test 2: placement, no throw
    //
    x = new(2) X;
    delete x;
    try
        {
        //
        // test 3: non-placement, throw
        //
        x = new X(true);
        }
    catch (...)
        {
        cout << "catch" << endl;
        }
    try
        {
        //
        // test 4: placement, throw
        //
        x = new(4) X(true);
        }
    catch (...)
        {
        cout << "catch" << endl;
        }
    return 0;
    }

/* correct output:

operator new(100)
operator delete(100)

operator new(100, 2)
operator delete(100)

operator new(100)
operator delete(100)
catch

operator new(100, 4)
operator delete(4)
catch

*/

— End of Listing —