Я предлагаю вместо использования «сырого» указателя на std::string
использовать boost::shared_ptr<std::string>
и передавать его. Когда вы закончите, вызовите его reset()
функцию; он уменьшит счетчик использования и автоматически освободит строку, если счетчик равен 0.
В качестве бонуса вы можете прикрепить boost::weak_ptr
объекты к этим строкам (вы можете прикрепить их к vector
, может быть) и отслеживать, сколько из них все еще "живы". Таким образом, вы узнаете, что по какой-либо причине строки не уменьшаются до 0.
Чтобы быть ясным:
if (_tickersQueue.size() > 0)
{
boost::shared_ptr<std::string> ticker(new std::string(PopNextTicker()));
if (!ticker->empty())
_threads.create_thread(boost::bind(&TAFYahooFinanceParadigm::ExecuteNextRequest, this, ticker));
else
ticker.reset(); // optional; ticker will drop out of scope anyway
}
Да, вы должны соответствующим образом настроить тип функции ExecuteNextRequest
. : -)