【发布时间】:2015-01-22 07:10:42
【问题描述】:
unique_ptr 非常有用。但是,它是不可复制的。如果为其指向的类提供虚拟克隆(深拷贝)方法,我认为它会变得更加有用。是否有必要或更好的方法来实现它?某些库中是否存在类似的智能指针?这是一个版本
template<class T>
class deep_ptr: private unique_ptr<T>
{
public:
using unique_ptr<T>::operator *;
using unique_ptr<T>::operator ->;
using unique_ptr<T>::operator bool;
using unique_ptr<T>::release;
using unique_ptr<T>::reset;
using unique_ptr<T>::get;
// add (DEFAULT_CONSTRUCTOR)(MOVE_CONSTRUCTOR)(MOVE_ASSIGNMENT_METHOD) ...
explicit deep_ptr(T* p) : unique_ptr(p) {}
deep_ptr(deep_ptr const& r) : unique_ptr(r->clone()) {}
deep_ptr& operator=(deep_ptrconst& r)
{ if (this != &r) reset(r->clone()); return *this; }
};
只是觉得它很有用,但从未见过类似的东西。 ???
【问题讨论】:
-
你能贴几行代码来说明你打算如何使用它吗?
-
@GuyGreer 哦,我的错,我误解了这个问题。
-
@GuyGreer - shared_ptr 没有深拷贝和浅拷贝语义。这取决于它指向的对象
-
@EdHeal 我的意思是复制一个 shared_ptr 不会复制底层对象,这使它成为一个浅拷贝,除非我误解了什么。
-
"... 但是,它不可复制" - 使其可复制会造成两个
unique_ptr管理同一个对象的情况。这将打破unique_ptr的单一所有权语义。
标签: c++ smart-pointers