You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询TODO类中复制构造函数重载正确性及引用符号必要性

问题解答

首先纠正:你写的不是复制构造函数

你代码里的TODO(const string& ent)是转换构造函数——用来把string类型转成TODO对象的构造函数,根本不是复制构造函数。

C++里复制构造函数的参数必须是当前类的引用(一般加const),标准写法是这样的:

TODO(const TODO& other) {
    // 把other的成员变量逐个复制到当前对象
    entry = other.entry;
    listArray = other.listArray; // 注意:如果listArray是动态分配的内存,这里要做深拷贝,不然多个对象会共用同一块内存,析构时会出错
    itemCount = other.itemCount;
    currInvItem = other.currInvItem;
    maxLength = other.maxLength;
}

要是你不显式写复制构造函数,编译器会自动生成一个默认的,默认做浅拷贝(挨个成员复制)。但你的类里有指针成员List* listArray,浅拷贝很容易出问题——多个对象指向同一块内存,析构的时候重复释放,直接崩。这种情况就得自己写深拷贝的复制构造函数。

关于参数是否需要用引用

你写的const string& ent是完全正确且推荐的写法,理由很简单:

  • 用引用能避免拷贝传入的string,少一次内存拷贝,效率更高。
  • const保证不会改传入的字符串,符合构造函数只初始化对象的逻辑。
    要是去掉引用写成TODO(string ent),会触发string的复制构造函数,平白多拷贝一次字符串,纯浪费性能。

另外提一句:你的setEntry函数参数string ent也可以改成const string& ent,同样是为了避免不必要的拷贝,优化性能。

内容的提问来源于stack exchange,提问作者Kate Rainey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:30:49