Od cplusplus.com:C++ skopiować konstruktora z członkami shared_ptr
Rzadko można natknąć klasy, która nie zawiera surowych wskaźników jeszcze konstruktor domyślny kopia nie jest wystarczające. Przykładem tego jest , gdy mamy obiekt zliczający referencje. boost :: shared_ptr <> to przykład: .
Czy ktoś może to wyjaśnić? Jeśli mamy klasę zawierającą boost::shared_ptr
, czy nie otrzymamy kopii skonstruowanej, gdy klasa zostanie skonstruowana w ten sposób - a zatem czy konstruktor shared_ptr
nie zrobi czegoś właściwego i nie zwiększy liczby odwołań? Poniższy kod, na przykład kopie Inner
właściwie - dlaczego nie ta praca dla 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;}
Może nie dałeś się zaskoczyć brakiem podwójnych negatywów, których nie ma w tym stwierdzeniu? –
Zapomnij o tym, to tylko bzdury. Udawaj, że nie wspominał o shared_ptr. Sądzę, że jest to jeszcze jeden z powodów, dla których cplusplus.com jest tak obrażany. –
Więc zadaj lepsze pytanie. Kiedy ludzie mówią, że "domyślny konstruktor kopiowania wykonuje płytką kopię", oznacza to "wywołuje konstruktory kopiujące wszystkich członków po kolei" lub "po prostu robi memcpy() w instancji klasy" –