createInvestment из книги Скотта Майерса Правило 18

209
04 мая 2018, 12:33

Что Майерс хотел сказать следующим кодом.

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 указатель.

Answer 1

Передаётся 0, т.к. реальный объект ещё не создан и если его не смогли создать, то вернётся shared_ptr указывающий на нулевой указазатель. Присвоить например так:

retVal = std::tr1::shared_ptr<Investment>(new InvestmentEx(), getRidOfInvestment);
Answer 2

Этот пример показывает идею автоматической "подчистки". Функция createInvestment создает "инвестицию" (сущность). Но нужно не забыть её "закрыть" (удалить, завершить). Пока пользоватеть (программист) хранит возвращенный умный указатель, объект "инвестиция" живет. Когда указатель выйдет за пределы области видимости, автоматически будет вызвана функция "завершения".

READ ALSO
Как отличить объект события от DOM объекта? JavaScript

Как отличить объект события от DOM объекта? JavaScript

Всем привет! В метод может придти как dom-объект(не пинайте за терминологию):

232
Angular JS добавить контроллер

Angular JS добавить контроллер

Всем доброй ночи,выше есть код контроллера

192
Как генерировать случайный string JavaScript?

Как генерировать случайный string JavaScript?

Нужно получить случайный набор букв и цифр (string), заданной длинны, например 10Как можно такое реализовать в JS?

212
Как сделать баннер адаптивным только по высоте?

Как сделать баннер адаптивным только по высоте?

Нужно создать html-5 баннер в Adobe Animate с фиксированной шириной (300px) и адаптивной высотой (минимальная высота должна оставаться 600px)Animate при настройке...

229