Здравствуйте, Marty, Вы писали:
M>value-классы
M>struct Cursor
M>{
M> Cursor() = delete;
M> Cursor(const Cursor&) = default;
M> Cursor& operator=(const Cursor&) = default;
M> Cursor(Cursor&&) = default;
M> Cursor& operator=(Cursor&&) = default;
M> Cursor(std::shared_ptr<ICursor> pimpl) : m_pImpl(pimpl) {}
M>protected:
M> std::shared_ptr<ICursor> m_pImpl;
M>};
Я бы сказал не value, а handle-классы.
Тут же несколько экземпляров при копировании будут шарить одну реализацию.
А value-семантика — это когда полностью независимые и равные объекты получаются.
В данном примере глубокое копирование понадобиться (через виртуальный метод clone, например).
Я, конечно, не знаю специфики вашей задачи, но для pimpl бы использовал unique_ptr.