1 //DeepCopy.cpp 2 #include <iostream> 3 using namespace std; 4 5 template<class object> 6 class ObjectCell { 7 public: 8 explicit ObjectCell(object initValue = object()); 9 ObjectCell(const ObjectCell &rhs);10 ~ObjectCell();11 12 const ObjectCell& operator=(const ObjectCell &rhs);13 14 object read();15 void write(object x);16 private:17 object* storeValue;18 };19 20 template<class object>21 ObjectCell<object>::ObjectCell(object initValue) {22 storeValue = new object(initValue);23 }24 25 template<class object>26 ObjectCell<object>::ObjectCell(const ObjectCell &rhs) {27 storeValue = new object(*rhs.storeValue);28 }29 30 template<class object>31 ObjectCell<object>::~ObjectCell() {32 delete storeValue;33 }34 35 template<class object>36 const ObjectCell<object>& ObjectCell<object>::operator=(const ObjectCell &rhs) {37 if(this != &rhs)38 *storeValue = *rhs.storeValue;39 return *this;40 }41 42 template<class object>43 object ObjectCell<object>::read() {44 return *storeValue;45 }46 47 template<class object>48 void ObjectCell<object>::write(object x) {49 *storeValue = x;50 }51 52 int main() {53 ObjectCell<int> icell1;54 ObjectCell<int> icell2(2);55 ObjectCell<int> icell3(icell2);56 57 cout << icell1.read() << endl;58 cout << icell2.read() << endl;59 cout << icell3.read() << endl;60 61 icell3.write(5);62 cout << icell3.read() << endl;63 64 ObjectCell<int> icell4;65 ObjectCell<int> icell5;66 icell5 = icell4 = icell3;67 cout << icell4.read() << endl;68 cout << icell5.read() << endl;69 }