M
michael_is_98
Код:
#include <map>
// ---------------------базовый класс - распределения
class ZRV
{
public:
virtual ~ZRV() {}
virtual const char*PoluchitNaim()=0;
};
// ---------------------- нормальное распределение --------------
class NormalZRV:public ZRV
{
public:
// s - среднее, sig - станд.откл.
NormalZRV(double s, double sig) : s(s), sig(sig),s1("среднее"),sig1("станд.откл."){}
virtual ~NormalZRV() {}
const char*PoluchitNaim() { return "нормальное";}
private:
double s,sig;
char *s1,*sig1;
};
//-----------------------"умный указатель"-------------------
class PtrZRV
{
public:
PtrZRV() {;}
template<class T> PtrZRV(T& ref) :ptr(new T(ref)) {}
~PtrZRV()
{
delete ptr;
}
private:
ZRV* const ptr;
};
void main(void)
{
typedef std::multimap<int, PtrZRV> ut;
ut a;
NormalZRV nzrv(1.0, 0.0);
a.insert(ut::value_type(1,nzrv));
}
Идея проста: есть базовый класс (распределения), на нем построен класс NormalZRV (нормальное распределение). Для базового класса ZRV создан класс "умный указатель".
Класс "умный указатель" используется в STL multimap.
Подскажите, почему после вызова метода insert для одного и того же экземпляра класса PtrZRV деструктор вызывается дважды?