首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在构造函数初始化列表中进行深度复制。c++

如何在构造函数初始化列表中进行深度复制。c++
EN

Stack Overflow用户
提问于 2014-10-11 03:43:51
回答 1查看 979关注 0票数 1

这是list类中节点的构造函数。我需要做一个酒厂的深刻副本,在初始化列表中的另一个类。物品是酿酒厂的一个例子。

代码语言:javascript
复制
List::Node::Node(const Winery& winery) : 
    item(winery)
    // your initialization list here
{
    Winery w = winery;
    item = w;
}

酿酒厂的构造师:

代码语言:javascript
复制
Winery::Winery(const char * const name, const char * const location,
        const int acres, const int rating) :
    name(name),
    location(location),
    acres(acres),
    rating(rating)
{
    char    *nm = new char[strlen(name) + 1];
    char    *loc = new char[strlen(location) + 1];
    strcpy(nm, this->name);
    strcpy(loc, this->location);
    this->name = nm;
    this->location = loc;
    this->acres = acres;
    this->rating = rating;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-11 04:15:09

在酒庄里复制三次绝对没有任何结果。

一次就够了:

代码语言:javascript
复制
List::Node::Node(const Winery& winery) : item(winery) {}

不过,您可以添加一个移动ctor (C++11及更高版本):

代码语言:javascript
复制
List::Node::Node(Winery&& winery) : item(std::move(winery)) {}

类似于Winery

如果这四个成员都是成员,那么Winery-ctor已经做了一个深拷贝。

我希望你能记住第3条规则,并且还提供了一个定制的拷贝机、拷贝赋值操作符和dtor.

不过,最好还是使用std::unique_ptrstd::string

此外,顶级cv-限定符是无用的,因此我删除了它们。

代码语言:javascript
复制
Winery::Winery(const char * name, const char * location,
        int acres, int rating) :
    name(strcpy(new char[strlen(name)+1], name),
    location(strcpy(new char[strlen(location)+1], location),
    acres(acres),
    rating(rating)
{}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26310837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档