class FooОднако, возникает вопрос: как все-таки явно скопировать объекты такого типа?
{
private:
Foo(const Foo&);
Foo& operator=(const Foo&);
};
Хорошее решение этого вопроса: использование функции clone(), как это сделано в Boost Pointer Container Library:
ptr_vector<T> v1, v2(v1.clone());Clone() создает свой клон на куче (да хоть через тот же приватный конструктор копирования) и возвращает auto_ptr на него, а соотвутствующий конструктор и оператор присваивания делают свое дело через swap():
v2 = v1.clone();
class Foo
{
public:
void swap(Foo&);
auto_ptr<Foo> clone() const;
Foo(auto_ptr<Foo> clone)
{
swap(*clone);
}
Foo& operator=(auto_ptr<Foo> clone)
{
swap(*clone);
return *this;
}
};
Комментариев нет:
Отправить комментарий