Mám problém s operátorem přiřazení u děděných tříd.
Mám základní třídu A a potomka B. nechávám si vygenerovat konstruktory a operátory přiřazení kompilátorem. Chci využívat polymorfismus, tak mám nadefinovaou obslužnou třídu:
#pragma once
template <class T> class Obsluha {
public:
Obsluha(): p(0) { }
Obsluha(const Obsluha& s){delete p; p = s.p->klon();}
Obsluha& operator=(const Obsluha&);
~Obsluha() { delete p; }
Obsluha(T* t): p(t) { }
operator bool() const { return p; }
T& operator*() const;
T* operator->() const;
private:
public:
T* p;
};
#include <stdexcept>
using std::runtime_error;
template <class T>
Obsluha<T>& Obsluha<T>::operator=(const Obsluha& pso)
{
if (&pso != this) {
delete p;
p = pso.p->klon();
}
return *this;
}
template <class T>
T& Obsluha<T>::operator*() const
{
if (p)
return *p;
return *p;
}
template <class T>
T* Obsluha<T>::operator->() const
{
if (p)
return p;
return 0;
}
Když ale potom mám kód:
vector<Obsluha<A> > data;
Obsluha<A> p1 = new B;
p1->nacist();//načtení dat do struktury
data.push_back(p);//zde nastává problém
V tomto kódu se mi do vectoru zkopírují jenom atributy základní třídy. Když jsem si nadefinoval operátory přiřazení a kopy kontruktory a dal do nich breakpoint, tak jsme zjistil, že aplikace nikdy operátor přiřazení a kopy konstruktor nikdy nevolá.
Nevíte kde může být chyba?