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

C++自定义构造函数出现额外重载,如何强制仅用int参数实例化?

为什么自定义构造函数后仍会出现额外的构造函数重载?

你看到的另外两个构造函数是C++编译器自动生成的特殊成员函数:

  • MyClass(MyClass &):拷贝构造函数,用于通过已有的类对象拷贝创建新对象
  • MyClass(const MyClass &&):移动构造函数,用于通过右值对象移动创建新对象

根据C++标准,只要你没有显式定义或删除这两个构造函数,编译器就会默认生成它们——哪怕你已经定义了其他自定义构造函数(比如你写的带int参数的版本)。

如果你想强制实例化MyClass必须传入int参数,完全禁止通过拷贝、移动的方式创建对象,只需要显式删除这两个自动生成的构造函数即可:

class MyClass
{
public:
    MyClass(int)
    {
    }

    // 显式禁用拷贝构造
    MyClass(const MyClass&) = delete;
    // 显式禁用移动构造
    MyClass(MyClass&&) = delete;
};

MyClass a(1); // 正常编译
// MyClass b(a); // 编译报错,无法通过拷贝创建实例
// MyClass c(std::move(a)); // 编译报错,无法通过移动创建实例

这样修改后,编译器就不会再生成这两个构造函数,任何尝试不通过int参数创建MyClass实例的代码都会触发编译错误,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:05:30