yigal_s: (Default)
[personal profile] yigal_s
Вот примерчик вполне стандартного использования shared_ptr.

Найдите ошибку, но главное, предложите способ её исправления.
Способ, желательно, приемлемый для практического использования в написании продакшен-кода, а не для починки лишь данного демонстрационного примера.

// SharedDeath.cpp : showing dangers of shared pointers
// Can you figure where the fix should be?

using namespace std;

void addElems(vector<shared_ptr<string>>& vec, const shared_ptr<string>& val, int num)
{
       for (int i = 0; i < num; ++i)
       {
              vec.push_back(val);
       }
}

int main()
{
       vector<shared_ptr<string>> vec;
       addElems(vec, make_shared<string>("Chicken"), 10);
       addElems(vec, make_shared<string>("Goat"), 10);
       addElems(vec, make_shared<string>("Pig"), 10);
       addElems(vec, vec[0], 100); // add the first element 100 times more
       return 0;
}