В моем базовом классе у меня есть вектор указателей моего производного класса, например,
std::vector<std::shared_ptr<Fing*>> files;
В моем производном абстрактном классе у меня есть фабричный метод, который выглядит как
static std::shared_ptr<Fing*> create(const std::string filetype, const std::string &path);
Производный абстрактный класс Fing * имеет три других производных класса, которые я буду называть производными A, B, C.Так что мой вектор в базовом классе shared_ptr больше похож на вектор shared_ptr<A* or B* or C*>
Так что сам фабричный метод выглядит так:
shared_ptr<Fing*> Fing::create(const std::string fileType, const
string &filepath){
if (fileType == "a"s){
return make_shared<Fing*>(new A(filepath));
}
if (fileType == "b"s){
return make_shared<Fing*>(new B(filepath));
}
return make_shared<Fing*>(new C(filepath)); }
Я называю фабричный метод как таковой
shared_ptr<Fing*> newA(Fing::create("a","path here"));
и вставьте его в мой вектор вот так
myfiles.emplace_back(move(newA));
Однако, хотя мой базовый класс разрушается, Вальгринд говорит, что естьтечь из моего заводского метода?