Насколько я понимаю, если у меня есть класс, который имеет переменную члена boost :: scoped_ptr, и если бы я должен был скопировать экземпляр этого класса и хотел бы, чтобы новый экземпляр имел свой член scoped_ptr, указывающий на копию того, что первый На экземпляр, на который указывает экземпляр, я должен был бы реализовать собственный конструктор копирования (и оператор присваивания) и сделать глубокое копирование того, на что указывает scoped_ptr. Было бы замечательно, если бы у умного типа указателя был конструктор копирования, который делал это сам.
Нет ли аналогичных интеллектуальных указателей в библиотеках c ++ boost / stl, в которые уже встроена функция глубокого копирования, чтобы при копировании интеллектуального указателя также копировался объект, на который он указывает? Хотя бы как вариант?
(Если бы был такой указатель, в моем случае указатель должен был бы знать немного больше о том, как он должен создавать новый объект, так как мои объекты, на которые указывал, имеют полиморфные классы с виртуальными функциями Clone (). Если умный указатель не может Я не могу понять, как глубоко копировать, клиентский код мог бы предоставить указатель на функцию или что-то, указывающее на функцию Clone, или какую-либо другую функцию создания фабрики. Я предполагаю, что это сложность того, как новый объект мог быть создан, который мог бы быть одним причин, по которым ни один указатель не обладает функциональностью глубокого копирования в конце концов ..?)
Насколько я знаю, ни один умный указатель в стандартной библиотеке не реализует семантику, которую вы хотите.
Тем не менее Ядро MNMLSTC библиотека обеспечивает — среди прочего — два умных указателя (а именно, core::poly_ptr
а также core::deep_ptr
), который должен соответствовать вашему варианту использования. В частности, из-за наличия виртуальных функций-членов, я считаю, core::poly_ptr
это то, что вам нужно.
Других решений пока нет …