Cześć,
mam problem ze zrozumieniem unique_ptr i znów potrzebuję Waszej pomocy.
Zacznę od tego, że mam funkcję:
unique_ptr<accessories> map_level::objectFactory(int type)
Zwraca mi ona unikalny wskaźnik na nowo utworzony obiekt danego typu.
Następnie, w drugiej funkcji używam tej metody do stworzenia danego obiektu:
unique_ptr<accessories> temp = objectFactory(type);
Posiadam także 2 wektory, w których przechowuję odpowiednio obiekty klasy accessories i enemies (enemies dziedziczy z accessories).
vector <unique_ptr <accessories>> objectsVector;
vector <unique_ptr <enemies>> enemiesVector;
Potrzebuję teraz sprawdzić, czy zwrócony obiekt jest typu enemies i przypisać go do odpowiedniego wektora.
enemies *isEnemie = dynamic_cast<enemies *>(temp.get());
if (isEnemie)
{
unique_ptr <enemies> enemie = make_unique<enemies>(isEnemie);
enemiesVector.push_back(std::move(enemie));
}
else
{
objectsVector.push_back(std::move(temp));
}
Niestety nie mogę tego wykonać, ponieważ wyskakuje mi błąd:
Severity Code Description Project File Line Suppression State
Error C2664 'enemies::enemies(const enemies &)': cannot convert argument 1 from 'enemies *' to 'const enemies &'
Czy może ktoś mi wyjaśnić, dlaczego to nie działa i jak temu zaradzić?
Mam jeszcze jedno pytanie, czy jeśli mam ten wektor unikalnych wskaźników, to czy na jego podstawię mogę zwrócić normalny wskaźnik? Wiem, że służy do tego .get(), ale nie rozumiem logiki, w tym momencie mój unikalny wskaźnik przestanie być unikalny.