Da cplusplus.com:C++ costruttore di copia con i membri shared_ptr
Raramente ci si imbatte in una classe che non contiene i puntatori prime ancora il costruttore di copia di default non è sufficiente. Un esempio di questo è quando si dispone di un oggetto conteggiato con riferimento. boost :: shared_ptr <> è l'esempio .
Qualcuno può elaborare su questo? Se abbiamo una classe contenente uno boost::shared_ptr
, non otterremo una copia costruita quando la classe avrà una copia costruita - e quindi il costruttore shared_ptr
non farà la cosa giusta e aumenterà il conteggio dei riferimenti? Il seguente codice, ad esempio, le copie Inner
correttamente - il motivo per cui non sarebbe questo lavoro per 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;}
Forse non sei stato inciampato dai doppi negativi mancanti che non sono in quella dichiarazione? –
Scordatelo, sono solo bollocks. Fai finta di non aver parlato di shared_ptr. Immagino che questo sia ancora un altro dei motivi per cui cplusplus.com è così insultato. –
Quindi, per fare una domanda migliore allora. Quando la gente dice "il costruttore di copie predefinito fa una copia superficiale", significa "chiama i costruttori di copia di tutti i membri a sua volta" o "semplicemente memcpy() nell'istanza della classe" –