使用引用传递的对象的深层副本初始化struct

时间:2014-10-13 01:42:39

标签: c++ struct initialization

我正在为一个类的一个赋值工作,并且有一个链表来保存每个节点中的一个对象。节点实现为结构。我在初始化对象时遇到问题,因为我似乎需要进行深层复制,但事实并非如此。对于我的生活,我无法弄清楚如何使它成为一个深刻的副本。每次删除原始对象时,名称和位置也会被删除。

我知道同一班级的其他同学也提出了类似的问题,例如this,但我的代码是一样的,我仍然遇到问题。

节点的构造如下:

List::Node::Node(const Winery& winery) :
    item(winery),
    nextByName(nullptr),
    nextByRating(nullptr)
{
}

Node结构的定义:

struct Node
    {
        Node(const Winery& winery);     // constructor
        Winery item;                    // an instance of winery
                                        // (NOT a pointer to an instance)
        Node *nextByName;               // next node in the name thread
        Node *nextByRating;             // next node in the rating thread
    };

酒厂类的构造如下:

Winery::Winery(const char * const name, const char * const location, const int acres, const int rating) :
    name(new char[strlen(name) + 1]),
    location(new char[strlen(location) + 1]),
    acres(acres),
    rating(rating)
{
    strcpy(this->name, name);
    strcpy(this->location, location);
}

我相当确定这是一个深层复制,所以问题出在节点的构造上,而不是酿酒厂。

0 个答案:

没有答案