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

247
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-объект(не пинайте за терминологию):

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

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

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

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

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

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

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

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

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

276