#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; }