没有重载运算符的深层复制?

时间:2014-10-12 04:10:51

标签: c++ deep-copy

我需要从一个类的一个实例中获取几个动态分配的数组,然后将它们复制到另一个实例中。问题是我不允许更改头文件,也没有机会重载赋值运算符。

这是Winery类的头文件。我不允许对此文件进行任何更改:

class Winery
{
    public:
    Winery(const char * const name, const char * const location, const int acres, 
           const int rating);
    virtual ~Winery(void);

    const char * const getName() const { return name; }
    const char * const getLocation() const { return location; }
    const int getAcres() const { return acres; }
    const int getRating() const { return rating; }

    private:
    char    *name;
    char    *location;
    int     acres;
    int     rating;
};

Winery的构造函数:

Winery::Winery(const char * const _name, const char * const _location, 
               const int acres, const int rating) :
    acres(acres),
    rating(rating)
{
    name = new char[sizeof(name) + 1];
    location = new char[sizeof(location) + 1];

    strcpy(name, _name);
    strcpy(location, _location);
}

这是我需要复制的地方。这是使用链表,headByName和newNode都是带有1个Winery实例(称为item)和2个指向其他节点的结构:

void List::insert(const Winery& winery)
{
    if (headByName == nullptr)
    {
        Node *newNode = new Node(winery);
        headByName = newNode;   
        return; 
    }
}

最后,Node结构及其成员。这些是我允许使用的唯一节点,我无法对此文件进行任何更改:

private:

    struct Node
    {
        Node(const Winery& winery);     
        Winery item;                            
        Node *nextByName;               
        Node *nextByRating;             
    };

    Node *headByName;                   
    Node *headByRating;                 
};

我交给的Winery实例中的数组在交给我后立即被释放,所以我需要将数组从winery中取出并放入headByName。

0 个答案:

没有答案