List<char*> MyList;
MyList.Add'("this is a string literal"); // OK, I am making the method's name up, but you know what I mean
MyList.Clear(); // now you'dend up in calling 'delete' for a string literal -> instant segfault
#include <list>
#include <iostream>
template <typename T>
class ListBase {
public :
ListBase(void) { }
virtual ~ListBase(void) { }
// ...
void clear(void);
private :
std::list<T> m_list;
};
template <typename T>
class List : public ListBase<T> {
};
template <typename T>
class List<T*> : public ListBase<T*> {
public :
void clear(void);
};
template <typename T>
void ListBase<T>::clear(void) {
std::cout << "clear function for objects" << std::endl;
}
template<typename T>
void List<T*>::clear(void) {
std::cout << "clear function for pointers" << std::endl;
}
int main(void) {
List<int> objList;
List<int*> ptrList;
objList.clear();
ptrList.clear();
return 0;
}
using ListBase<TYPE>::Sort;
template<typename T>
class List {
public:
// whatever functionality you need here ...
void clear() { m_list.clear(); }
private :
std::list<T> m_list;
};
List<int> intList;
// fill it ...
intList.clear(); // will work as expected
List<int*> rawPtrList;
// fill it ...
rawPtrList.clear(); // will remove the pointers from the list, but not delete them
List<shared_ptr<int> > smartPtrList;
// fill it ...
smartPtrList.clear(); // will work as expected