首页 > 解决方案 > 删除构造函数和模板

问题描述

考虑以下:

template<typename T>
class A
{
public:
    A(int a)
    {}

    A() = delete;
};

class B
{
public:
    B()
    {
        A<int> a;
    }
};

当然,这段代码无法编译,因为 B 类的构造函数试图默认构造 A 类对象,而我已明确删除了该构造函数。一切都很好。

但是,如果我将 B 设为类模板

template<typename T>
class A
{
public:
    A(int a)
    {}

    A() = delete;
};

template<typename T>
class B
{
public:
    B()
    {
        A<int> a;
    }
};

然后代码确实编译了,看来我现在可以默认构造一个类 A 的实例。

为什么是这样?我错过了什么?

谢谢。

标签: c++

解决方案


哦!在尝试从模板实例化类之前,编译器似乎看不到错误。

实际上尝试创建 B<> 类型的对象会产生预期的错误。

对不起,如果我浪费了你的时间。


推荐阅读