c++ constructeur de copie avec shared_ptr membres

De cplusplus.com:

Rarement, vous rencontrerez une classe qui ne contient pas de raw pointeurs
pourtant, le constructeur de copie par défaut n'est pas suffisant. Un exemple de ce
c'est quand vous avez une référence compté objet. boost::shared_ptr<> est
exemple.

Quelqu'un peut-il fournir des précisions sur ce? Si nous avons une classe contenant un boost::shared_ptr, de ne pas obtenir la copie construit lorsque la classe devient exemplaire construit - et donc de ne pas le shared_ptr constructeur de faire la bonne chose et augmenter le nombre de références? Le code suivant, par exemple, des copies Inner correctement - pourquoi ne serait-ce pas le travail pour shared_ptr?:

#include <iostream>
using namespace std;

class Inner
{
public:
 Inner() { cout << "inner default constructed" << endl;}
 Inner(const Inner& other) { cout << "inner properly copied" << endl;}
};

class Outer
{
 Inner i;
};

int main() { Outer o; Outer p(o); return 0;}
Peut-être que vous n'obtenez pas fauché par l'absence de la double négation qui ne sont pas dans cet état?
L'oublier, c'est juste de la connerie. Faire semblant de ne pas mentionner shared_ptr. Je suppose que c'est encore une autre des raisons pour cplusplus.com est tellement vilipendé.
Donc de poser une question alors. Quand les gens disent "le constructeur de copie par défaut ne une copie superficielle", cela signifie "qu'il appelle la copie des constructeurs de tous les membres à tour de rôle" ou "il n'a tout simplement memcpy() sur l'instance de la classe"
Cette copie superficielle entreprise est juste déroutant. Il n'a tout simplement un membre de la sage-copie. Ce qui se passe réellement lors de la copie dépend des types de données des membres impliqués.

OriginalL'auteur Sideshow Bob | 2013-07-24