Существует ли область видимости ptr со встроенной функцией глубокого копирования?

Насколько я понимаю, если у меня есть класс, который имеет переменную члена boost :: scoped_ptr, и если бы я должен был скопировать экземпляр этого класса и хотел бы, чтобы новый экземпляр имел свой член scoped_ptr, указывающий на копию того, что первый На экземпляр, на который указывает экземпляр, я должен был бы реализовать собственный конструктор копирования (и оператор присваивания) и сделать глубокое копирование того, на что указывает scoped_ptr. Было бы замечательно, если бы у умного типа указателя был конструктор копирования, который делал это сам.

Нет ли аналогичных интеллектуальных указателей в библиотеках c ++ boost / stl, в которые уже встроена функция глубокого копирования, чтобы при копировании интеллектуального указателя также копировался объект, на который он указывает? Хотя бы как вариант?

(Если бы был такой указатель, в моем случае указатель должен был бы знать немного больше о том, как он должен создавать новый объект, так как мои объекты, на которые указывал, имеют полиморфные классы с виртуальными функциями Clone (). Если умный указатель не может Я не могу понять, как глубоко копировать, клиентский код мог бы предоставить указатель на функцию или что-то, указывающее на функцию Clone, или какую-либо другую функцию создания фабрики. Я предполагаю, что это сложность того, как новый объект мог быть создан, который мог бы быть одним причин, по которым ни один указатель не обладает функциональностью глубокого копирования в конце концов ..?)

0

Решение

Насколько я знаю, ни один умный указатель в стандартной библиотеке не реализует семантику, которую вы хотите.

Тем не менее Ядро MNMLSTC библиотека обеспечивает — среди прочего — два умных указателя (а именно, core::poly_ptr а также core::deep_ptr), который должен соответствовать вашему варианту использования. В частности, из-за наличия виртуальных функций-членов, я считаю, core::poly_ptr это то, что вам нужно.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]