Членам-указателям с семантикой владения (размещение в конструкторе и освобождение в деструкторе) обычно требуется написать собственный конструктор копирования и оператор присваивания (обычно известный как Правило трех ), поскольку генерируемые компилятором единицыпросто скопируйте указатель члена, а не его базовый объект.Поэтому, если вы в какой-то момент скопируете содержащий объект, в итоге вы получите два объекта с указателем, совпадающим с элементом, и второй уничтоженный объект попытается удалить уже удаленный указатель.
В самом простом случае вы должны убедиться, чтоконструктор копирования делает что-то вроде
TheClass::TheClass(const TheClass &rhs)
: pV(new vector<FMCounter>(*rhs.pV))
{
}
, а оператор присваивания делает что-то вроде
TheClass& TheClass::operator=(const TheClass &rhs)
{
*pV = *rhs.pV
return *this;
}