Von cplusplus.com kopieren:C++ Konstruktor mit shared_ptr Mitgliedern
Selten werden Sie über eine Klasse kommen, die nicht roh Zeiger enthalten noch der Standard-Copy-Konstruktor ist nicht ausreichend. Ein Beispiel für diese ist, wenn Sie ein Referenzobjekt haben. boost :: shared_ptr <> ist Beispiel.
Kann jemand näher darauf eingehen? Wenn wir eine Klasse haben, die eine boost::shared_ptr
enthält, wird diese Kopie nicht erstellt, wenn die Klasse eine Kopie erstellt - und wird daher der shared_ptr
Konstruktor nicht das Richtige tun und die Referenzzahl erhöhen? Der folgende Code zum Beispiel Kopien Inner
richtig - warum nicht diese Arbeit für 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;}
Vielleicht sind Sie nicht durch die fehlenden doppelten Negative, die nicht in dieser Aussage enthalten sind, nicht gestolpert? –
Vergiss es, es ist nur bollocks. Tun Sie so, als ob shared_ptr nicht erwähnt würde. Ich denke, das ist noch einer der Gründe, warum cplusplus.com so geschmäht wird. –
So eine bessere Frage dann zu stellen. Wenn Leute sagen "der Standardkopiekonstruktor macht eine flache Kopie" bedeutet das, dass "er die Kopierkonstruktoren aller Mitglieder der Reihe nach aufruft" oder "er tut einfach memcpy() auf der Klasseninstanz" –