Chcę mieć wektor wskaźników do obiektów w mojej klasie. Aby uniknąć tworzenia dla niego destruktora, chciałem użyć std::unique_ptr
, ponieważ obiekty są tworzone/posiadane/niszczone w mojej klasie, ale mam błąd kompilatora, którego nie mogę zrozumieć. Następny kod będzie służyć jako krótki próbki do mojego problemu:Jakie jest prawidłowe użycie std :: unique_ptr podczas przesuwania do std :: vector
std::unique_ptr<int> createPtr(int value)
{
std::unique_ptr<int> ptr(new int(value));
return ptr;
};
int main()
{
std::vector<std::unique_ptr<int>> vec;
vec.push_back(createPtr(1));
std::unique_ptr<int> ptr = createPtr(2);
vec.push_back(ptr);//error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
}
Czy możesz mi wyjaśnić, dlaczego ten błąd i co jest poprawne wykorzystanie dla std::unique_ptr
?
Jaki jest sens przechowywania wskaźników do 'int' zamiast wartości w wektorze? –
Jeśli rozważasz 'std :: unique_ptr <>', to prawdopodobnie * nie * masz "wektor obiektów", ale "wektor wskaźników do obiektów". Gdybyś miał "wektor obiektów", zniszczenie nastąpiłoby automatycznie. –
@TadeuszKopec Proszę przeczytać pytanie – Felics