Pourquoi a-t-on besoin d'un nul shared_ptr et comment peut-il être utilisé?

De Scott Meyers Effective C++, l'article 18 Faire des interfaces faciles à utiliser correctement et difficile à utiliser de manière incorrecte, il a mentionné l'null shared_ptr:

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

et la vogue de cette opération, le

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

Auquel cas on peut avoir besoin de créer une valeur null shared_ptr et ne travail plus tard? Pourquoi ne pas simplement créer le shared_ptr chaque fois que vous avez les ressources (pointeur brut)?

Depuis Scott Meyers n'a pas montré le complète d'affectation dans l'exemple précédent, je pensais que le shared_ptr d'assignation de l'opérateur est surchargé que l'on peut faire ceci:

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

Mais j'ai essayé avec boostmise en œuvre, il ne fonctionne pas de cette façon. Alors quel est le sens d'avoir la valeur null shared_ptr?

Je suis presque sûr que je suis absent quelque chose ici, quelqu'un m'aider s'il vous plaît.

ps. plus sur l'initialisation et affectation d'un 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;
}

cet exemple ne peut pas être compilé par g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 et le dernier 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
J'ai essayé de le comprendre, ici: ideone.com/BUjOwZ. Je n'arrivais pas à trouver une explication.
Comme d'autres l'ont souligné, il ya beaucoup de raisons d'avoir besoin d'un nul shared_ptr, tout comme vous avez null raw pointeurs. Mais le vrai mystère est pourquoi Scott ressenti le besoin de disposer d'une coutume deleter.

OriginalL'auteur zhanwu | 2011-07-28