shared_ptr zapobieganie usuwaniu obiektu

0

Cześć. Mam taki kod

#include <memory>
#include <vector>
using namespace std;

void write(vector<int>& tab)
{
shared_ptr<int> p (&(tab[1]);
cout << *p;
}

int main()
{
    vector<int> tab;
    tab.push_back(10);
    tab.push_back(30);
    tab.push_back(20);
    write(tab);
    cout << tab[1];
    return 0;
}

Coś się psuje gdy funkcja write() się już wykona.(vector traci wszystkie wartości jego elementów).

1

A jakim cudem ma się nie psuć?
shared_ptr<int> p (&(tab[1]);
Tworzysz tutaj obiekt std::shared_ptr. Po zakończeniu funkcji write obiekt umiera i zwalnia pamięć pod &(tab[1]). Bo dlaczego ma nie zwalniać? Skąd ma wiedzieć że jakiś vector tym zarządza?

2

Masz w kodzie UB. shared_ptr przejmuje kontrolę nad obiektem przekazanym przez wskaźnik. Tylko w tym przypadku nie ma prawa tego robić, bo to element wektora.

1 użytkowników online, w tym zalogowanych: 0, gości: 1