Dec. 6th, 2018

yigal_s: (Default)
Вот примерчик вполне стандартного использования 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;
}
yigal_s: (Default)


Допишите код класса А, чтобы программа печатала два разных числа, например, 2 и 3.
Глобальные переменные использовать нельзя.
Преобразование типа использовать нельзя.
Статические члены класса использовать нельзя.
mutable использовать нельзя.
Никаких инстансов никаких классов помимо единственного уже созданного в функции main создавать нельзя. Функцией new пользоваться нельзя.
В общем, ничего нельзя )))

Функция get(), даю подсказку, выглядит вот так:

int A::get() const { return val; }