Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <class T>
- class Data
- {
- public:
- Data() {}
- ~Data() {}
- public:
- T m_value;
- };
- template <class T>
- class Data<T*>
- {
- public:
- Data() { m_value = new T();}
- //~Data() {delete m_value;} ********This gives error***
- ~Data() {} //****** This works
- Data(const T* value) { m_value = new T(*value); }
- Data(const T value) { m_value = new T(value); }
- template <class T>
- friend Data<T*> operator+(Data<T*> a, Data<T*> b);
- Data<T*>& operator=(const Data<T*> value);
- public:
- T* m_value;
- };
- //friend operator+
- template <class T>
- Data<T*> operator+(Data<T*> a, Data<T*> b)
- {
- Data<T*> temp(*a.m_value + *b.m_value);
- return temp;
- }
- //member operator=
- template <class T>
- Data<T*>& Data<T*>::operator=(const Data<T*> value)
- {
- if (!this->m_value)
- this->m_value = new T();
- *this->m_value = *value.m_value;
- return *this;
- }
- ~Data() {delete m_value;} ********This gives error
- ~Data() {} ********This works
- void main()
- {
- typedef Data<int *> Data_Int;
- Data_Int dt1(100);
- Data_Int dt2(200);
- Data_Int dt3;
- dt3 = dt1 + dt2; // error line
- cout << *dt3.m_value;
- cin.ignore();
- }
- if(this->m_value)
- delete m_value;
- try
- {
- delete m_value;
- }
- catch(std::exception& e)
- {
- cout << e.what();
- }
Add Comment
Please, Sign In to add comment