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

删除拷贝构造函数后编译器为何不生成默认构造函数?

显式删除拷贝构造函数后默认构造函数无法使用的原因

在C++17中,只要你显式声明了任何构造函数(哪怕是被delete标记的),编译器就不会再为类自动生成默认构造函数。

你的代码里显式写了A(const A& a) = delete;,这属于显式声明构造函数的范畴,因此编译器不会自动合成无参的默认构造函数。这时候执行A a;就会因为找不到匹配的构造函数而报错:No matching constructor for initialization of 'A'。

原代码示例:

class A {
public:
    A(const A& a) = delete;
    static void test() {
        A a; // 此处报错
    }
};

解决方法就是手动显式提供默认构造函数,不管是用= default让编译器生成标准实现,还是自己写空实现:

class A {
public:
    A() = default; // 显式声明默认构造函数
    A(const A& a) = delete;
    static void test() {
        A a; // 正常运行
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:12:01