Зачем нужен null shared_ptr и как его можно использовать?

В статье Скотта Мейерса Effective C ++ , пункт 18 Сделать интерфейсы удобными для правильного использования и трудными для неправильного использования , он упомянул null shared_ptr:

std::tr1::shared_ptr<Investment> pInv(static_cast<Investment*>(0), getRidOfInvestment)

и операция присвоения vogue

pInv = ...     //make retVal point to the correct object

В этом случае может потребоваться создать null shared_ptr и выполнить назначение позже? Почему бы просто не создать shared_ptr всякий раз, когда у вас есть ресурсы (необработанный указатель)?

Поскольку Скотт Мейерс не показал полное присваивание в предыдущем примере, я думал, что оператор присваивания shared_ptr перегружен, что можно сделать это:

pInv = new Investment;    // pInv will take charge of the pointer
                          // but meanwhile keep the delete function it already had

Но я попытался с реализацией boost , это не работает. Тогда какой смысл иметь null shared_ptr?

Я почти уверен, что мне что-то не хватает нг, помогите мне, пожалуйста,

ps. подробнее об инициализации и назначении shared_ptr

#include <boost/shared_ptr.hpp>

int main(int argc, char *argv[])
{
    boost::shared_ptr<int> ptr1(new int);
    boost::shared_ptr<int> ptr2;
    ptr2.reset(new int);
    boost::shared_ptr<int> ptr3 = new int;

    return 0;
}

этот пример не может быть скомпилирован с помощью g ++ (Ubuntu / Linaro 4.5.2-8ubuntu4) 4.5.2 и последней версии boost:

sptr.cpp: In function ‘int main(int, char**)’:
sptr.cpp:8:39: error: conversion from ‘int*’ to non-scalar type ‘boost::shared_ptr<int>’    requested
9
задан Chris Drew 30 March 2014 в 02:06
поделиться