От cplusplus.com:
Редко вы столкнетесь с классом, который не содержит исходных указателей, но конструктор копии по умолчанию недостаточно. Пример этого - когда у вас есть объект с подсчетом ссылок. boost :: shared_ptr <> является примером.
Может ли кто-то уточнить это? Если у нас есть класс, содержащий boost::shared_ptr
, не будет ли он создан, когда будет создан экземпляр класса, и, следовательно, конструктор shared_ptr
не подойдет и не увеличит счетчик ссылок? Следующий код, например, копирует Inner
правильно - почему бы не работать для 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;}