#include <string.h>
#include <stdlib.h>
#include <stdio.h>

class A
{
public:
    A(char* name) 
        {
            if( name )
            {
                unsigned int len = strlen(name);
                printf("len=%i\n",len);
                m_name = (char*) malloc( sizeof(char)*(len + 1) );
                strcpy(m_name,name);
            }
            else
                m_name = 0;
        }
    
    A(const A& a)
        {
            printf("Copy constructing\n");

            char* name = a.getName();

            if( name )
            {
                unsigned int len = strlen(name);
                m_name = (char*) malloc(sizeof(char)*(len+1));
                strcpy(m_name,name);
            }
            else if( m_name )
            {
                free(m_name);
                m_name = 0;
            }
        }

    ~A()
        {
            if( m_name ) 
            {
                printf("Freeing memory\n");
                free(m_name);
            }
        }

    void print() { printf("%s\n",m_name); }
    
    char* getName() const { return m_name; }
    
private:
    char* m_name;
};

int main()
{
    A* a = new A("aaa");
    a->print();

    A* b = new A(*a);
    b->print();

    delete a;

    b->print();

    return 0;
}