Что Майерс хотел сказать следующим кодом.
std::tr1::shared_ptr<Investment> createInvestment()
{
std::tr1::shared_ptr<Investment> retVal(static_cast<Investment*>(0),
getRidOfInvestment);
... // make retVal point to the
// correct object
return retVal;
}
почему в retVal передается 0, и как потом перед return передать в retVal указатель.
Передаётся 0, т.к. реальный объект ещё не создан и если его не смогли создать, то вернётся shared_ptr указывающий на нулевой указазатель. Присвоить например так:
retVal = std::tr1::shared_ptr<Investment>(new InvestmentEx(), getRidOfInvestment);
Этот пример показывает идею автоматической "подчистки". Функция createInvestment создает "инвестицию" (сущность). Но нужно не забыть её "закрыть" (удалить, завершить). Пока пользоватеть (программист) хранит возвращенный умный указатель, объект "инвестиция" живет. Когда указатель выйдет за пределы области видимости, автоматически будет вызвана функция "завершения".
Сборка персонального компьютера от Artline: умный выбор для современных пользователей