如何在某些智能指针中实现深度复制功能? [英] How to implement deep copy feature in some smart pointer?

查看:47
本文介绍了如何在某些智能指针中实现深度复制功能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

unique_ptr非常有用.但是,它是不可复制的.如果为它的指向性类提供病毒复制(深层复制)方法,我认为它将变得更加有用.是否有必要或有更好的实施方法?一些库中是否存在任何类似的智能指针?这是一个版本

unique_ptr is quite useful. However, it is not copyable. If virutal clone (deep copy) methods are provided for its pointed class, I think it will become more useful. Is it necessary or any better way to implement it? Any similar smart pointer exist in some library? Here is a version

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; }
};

Juse觉得它非常有用,但是从没有看到类似的东西.???

Juse feel it is very useful but never see similar things. ???

推荐答案

除非我误解了您要查找的内容,否则,如果一个类具有克隆方法,那应该足以获取您要寻找的内容.

Unless I am misunderstanding what you are looking for, if a class has a clone method, that should be sufficient to get what you are looking for.

示例代码:

#include <iostream>
#include <memory>

struct A
{
   virtual ~A() {}
   virtual A* clone() = 0;
};

struct B : A
{
   B(int in = 0) : x(in) {}
   B(B const& copy) : x(copy.x) {}
   virtual ~B() {std::cout << "In B::~B()\n";}

   virtual A* clone() { return new B(*this); }
   int x;
};

int main()
{
   std::unique_ptr<A> p1(new B(10));
   std::unique_ptr<A> p2(p1->clone());
   return 0;
}

运行上述程序的输出:


In B::~B()
In B::~B()

这篇关于如何在某些智能指针中实现深度复制功能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆