c++ - 如何制作构造函数的深层副本
问题描述
我有以下构造函数:
在 HPP 文件中
Card(string name, int mana_cost, CardType type);
在 CPP 文件中
Oop::Card::Card(string name, int mana_cost, CardType type)
: name_(name), mana_cost_(mana_cost), type_(type)
{
}
并想制作上面那个的复制构造函数,我试过了
Card( const Card &b)
{
name_ = new std::string();
*name_ = *b.name_;
mana_cost_ = new int();
type_ = new CardType();
}
但无济于事
我怎么能做一个复制构造函数
提前致谢
解决方案
您的转换构造函数没有new
类成员,因此您的复制构造函数也不需要new
它们。只需以与转换构造函数相同的方式初始化复制构造函数中的成员,只需使用从传递的Card
对象中获取的输入值,例如:
Oop::Card::Card(const Card &b)
: name_(b.name_), mana_cost_(b.mana_cost_), type_(b.type_)
{
}
在 C++11 及更高版本中,您甚至可以将一个构造函数委托给另一个构造函数:
Oop::Card::Card(const Card &b)
: Card(b.name_, b.mana_cost_, b.type_)
{
}
或者,最简单的解决方案是只default
使用复制构造函数并让编译器为您处理复制,因为您的成员正在使用支持正确复制语义的类型:
class Card {
public:
Card(string name, int mana_cost, CardType type);
Card(const Card &) = default; // <--
};
推荐阅读
- regex - scala apache访问日志正则表达式不起作用
- flutter - Flutter:构建函数返回 null
- netscaler - CItrix Netscaler Nitro API 是否是跨国的?
- javascript - 消除渲染阻塞资源 Wordpress
- node.js - 使用 Node.js 和 TypeScript 从标准输入获取值
- css - 随着窗口大小减小到 500 像素,滑块向左拉
- python - 将浮点数转换为二进制的函数中的解包错误
- git - IntelliJ IDEA 2019+ Git“提交目录”显示排除的 Maven 目标文件夹
- r - 在 R 中使用 cat 函数打印矢量 - 如何避免丢失元素名称
- c# - UWP 树视图崩溃