[ create a new paste ] login | about

Link: http://codepad.org/y3jWmkqf    [ raw code | output | fork ]

C++, pasted on Jun 24:
#include <iostream>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <boost/ptr_container/ptr_vector.hpp>

void say( const char* msg ) { std::cout << msg << std::endl; }

class Window
{
public:
    virtual void draw() { say( "Window::draw" ); };
    virtual ~Window() { say( "Window::destructor" ); };
};

class WindowA : public Window
{
public:
    virtual void draw() { say( "WindowA::draw" ); };
    virtual ~WindowA() { say( "WindowA::destructor" ); };
};

class Windows1
{
public:
    typedef std::vector< boost::shared_ptr<Window> > container_type;
    
    void add_window( const boost::shared_ptr<Window>& p )
    {
        m_windows.push_back(p);
    };
    
    void draw_windows()
    {
        for( container_type::iterator i = m_windows.begin(); i != m_windows.end(); ++i ) {
            (*i)->draw();
        }
    };
    
private:
    container_type m_windows;
};

class Windows2
{
public:
    typedef boost::ptr_vector<Window> container_type;
    
    void add_window( Window* p )
    {
        m_windows.push_back(p);
    };
    
    void draw_windows()
    {
        for( container_type::iterator i = m_windows.begin(); i != m_windows.end(); ++i ) {
            (*i).draw();
        }
    };
    
private:
    container_type m_windows;
};

int main()
{
    {
        say( "Windows1" );
        Windows1 windows;
        boost::shared_ptr<Window> ptr_win1( new Window() );
        boost::shared_ptr<Window> ptr_win2( new WindowA() );
        windows.add_window( ptr_win1 );
        windows.add_window( ptr_win2 );
        windows.draw_windows();
    }
    
    {
        say( "Windows2" );
        Windows2 windows;
        windows.add_window( new Window() );
        windows.add_window( new WindowA() );
        windows.draw_windows();
    }
    
    return 0;
}


Output:
1
2
3
4
5
6
7
8
9
10
11
12
Windows1
Window::draw
WindowA::draw
Window::destructor
WindowA::destructor
Window::destructor
Windows2
Window::draw
WindowA::draw
Window::destructor
WindowA::destructor
Window::destructor


Create a new paste based on this one


Comments: